sql >> Database >  >> RDS >> Sqlserver

Wat is DATALENGTH() in SQL Server?

In SQL Server (en Azure), de T-SQL DATALENGTH() functie geeft het aantal bytes terug dat wordt gebruikt om een ​​uitdrukking weer te geven.

Bijvoorbeeld:

SELECT DATALENGTH('Lit');

Resultaat:

3

In dit geval zijn er 3 bytes in de string Lit .

Dit is echter een eenvoudig voorbeeld. De resultaten kunnen er heel anders uitzien, afhankelijk van het gegevenstype.

In het bovenstaande voorbeeld zagen we dat er 3 bytes zijn in het woord Lit . Dit is ook precies het aantal tekens in de string. Maar als we hetzelfde woord uit een kolom in een database retourneren, krijgen we mogelijk een ander resultaat. Bijvoorbeeld dit:

SELECT 
    ArtistName, 
    DATALENGTH(ArtistName) AS DataLength 
FROM Artists 
WHERE ArtistName = 'Lit';

Resultaat:

ArtistName  DataLength
----------  ----------
Lit         6          

In dit geval is de datalengte 6.

De reden hiervoor is dat in deze specifieke database de kolom een nvarchar(255) heeft data type. De nvarchar gegevenstype is een unicode-tekenreeks, die 2 bytes per teken opslaat (wat in feite de gegevenslengte verdubbelt). Als de kolom in plaats daarvan varchar(255) . had gebruikt het zou een gegevenslengte van 3 hebben. Als het echter had gezegd, char(25) de string zou een datalengte van 25 hebben.

Ook als het eerder char(25) . was geweest maar het werd toen geconverteerd naar varchar(255) het zou nog steeds een gegevenslengte van 255 hebben.

In alle gevallen is de LEN() functie zou 3 hebben geretourneerd.

Blanco's achterop

De DATALENGTH() functie telt volgspaties (bijv. spaties aan het einde van de tekenreeks, tabs, regelterugloop, enz.).

Voorbeeld:

SELECT DATALENGTH('Lit ');

Resultaat:

4

In dit voorbeeld heb ik eenvoudig een spatie toegevoegd aan het einde van de string. Dit is weer een van de verschillen tussen LEN() en DATALENGTH() .

U kunt voorbeelden zien van LEN() en DATALENGTH() naast elkaar in LEN() vs DATALENGTH() .

Retourtype

De DATALENGTH() functie retourneert een gegevenstype van int , tenzij de uitdrukking  varchar(max) . is , nvarchar(max) of varbinary(max) , in welk geval het bigint . teruggeeft .


  1. PostgreSQL-extensie installeren op alle schema's

  2. Een-op-nul-of-een-relatie implementeren in SQL Server

  3. Query die een hiërarchische lijst van typen triggergebeurtenissen in SQL Server retourneert

  4. Zijn mysql_real_escape_string() en mysql_escape_string() voldoende voor app-beveiliging?