Hvis du har arbejdet med SQL Server i længere tid, er du muligvis stødt på Datalength()
fungere. Denne funktion returnerer antallet af bytes, der bruges til at repræsentere et udtryk.
Men hvis du er flyttet til MySQL, leder du muligvis efter en funktion, der gør det samme.
I MySQL er Length()
funktion gør stort set det samme som T-SQL Datalength()
funktion gør i SQL Server (og Azure). MySQLs Length()
funktion returnerer længden af en streng, målt i bytes.
Eksempler
Her er nogle eksempler til demonstration.
SQL-server
Her er et grundlæggende eksempel for SQL Server (ved hjælp af T-SQL):
SELECT DATALENGTH('Cat') AS Datalength;
Resultat:
Datalength ---------- 3
MySQL
Her er den tilsvarende forespørgsel i MySQL:
SELECT LENGTH('Cat') AS Length;
Resultat:
+--------+ | Length | +--------+ | 3 | +--------+
Begge måler bytes
Men vigtigst af alt måler begge funktioner bytes , ikke tegn . Så hvis dataene er gemt som en Unicode-streng, vil antallet af bytes være det dobbelte af antallet af tegn. Dette skyldes, at Unicode-strenge bruger 2 bytes pr. tegn.
Nedenfor er et eksempel på at køre i det væsentlige den samme forespørgsel mod en Unicode-kolonne i SQL Server og derefter i MySQL.
SQL-server
SELECT DATALENGTH(ArtistName) AS DataLength FROM Artists WHERE ArtistName = 'Lit';
Resultat:
DataLength ---------- 6
MySQL
SELECT LENGTH(ArtistName) AS Length FROM Artists WHERE ArtistName = 'Lit';
Resultat:
+--------+ | Length | +--------+ | 6 | +--------+
Det er vigtigt at bemærke, at grunden til, at disse eksempler returnerer 6, er på grund af den datatype, der bruges i databasen. Begge eksempler kunne også returnere 3, hvis dataene ikke blev gemt som Unicode.
Tegn vs. bytes
I SQL Server-eksemplet, hvis vi havde brugt Len()
funktion i stedet ville den have returneret 3. Dette er fordi Len()
returnerer antallet af tegn – ikke bytes.
På samme måde for MySQL, hvis vi havde brugt Char_Length()
funktion, ville den også have returneret 3, fordi Char_Length()
returnerer antallet af tegn i stedet for bytes.