Om du har arbetat med SQL Server hur länge som helst kan du ha stött på Datalength()
fungera. Denna funktion returnerar antalet byte som används för att representera ett uttryck.
Men om du har flyttat till MySQL kanske du letar efter en funktion som gör samma sak.
I MySQL, Length()
funktion gör i princip samma sak som T-SQL Datalength()
fungerar i SQL Server (och Azure). MySQL:s Length()
funktion returnerar längden på en sträng, mätt i byte.
Exempel
Här är några exempel att visa.
SQL-server
Här är ett grundläggande exempel för SQL Server (med T-SQL):
SELECT DATALENGTH('Cat') AS Datalength;
Resultat:
Datalength ---------- 3
MySQL
Här är motsvarande fråga i MySQL:
SELECT LENGTH('Cat') AS Length;
Resultat:
+--------+ | Length | +--------+ | 3 | +--------+
Båda mäter byte
Men viktigast av allt, båda funktionerna mäter byte , inte tecken . Så om data lagras som en Unicode-sträng kommer antalet byte att vara dubbelt så många tecken. Detta beror på att Unicode-strängar använder 2 byte per tecken.
Nedan är ett exempel på att köra i huvudsak samma fråga mot en Unicode-kolumn i SQL Server, sedan 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 är viktigt att notera att anledningen till att dessa exempel returnerar 6 är på grund av datatypen som används i databasen. Båda exemplen kan också returnera 3 om data inte lagrades som Unicode.
Tecken kontra byte
I SQL Server-exemplet, om vi hade använt Len()
funktion istället skulle den ha returnerat 3. Detta beror på att Len()
returnerar antalet tecken – inte byte.
På liknande sätt för MySQL, om vi hade använt Char_Length()
funktion, skulle den också ha returnerat 3, eftersom Char_Length()
returnerar antalet tecken istället för byte.