I MySQL finns det många gånger där length()
funktion och char_length()
funktionen ger exakt samma resultat. Men det finns också tillfällen då resultaten blir helt annorlunda. Här är varför.
Först, här är definitionen för var och en av dessa funktioner:
char_length()
- Returnerar längden på en sträng, mätt i tecken.
length()
- Returnerar längden på en sträng, mätt i byte.
Lägg märke till "tecken" vs "byte" - en mäts i tecken , den andra mäts i byte .
I många fall kommer antalet byte att vara detsamma som antalet tecken i strängen, men detta är inte alltid fallet. Antalet byte som används per tecken beror på hur data lagras. Till exempel, om strängen lagras som Unicode-data, kommer det att finnas 2 byte per tecken.
Här är ett grundläggande exempel med ASCII-text (där båda funktionerna returnerar samma resultat):
SELECT CHAR_LENGTH('Lit'), LENGTH('Lit');
Resultat:
+--------------------+---------------+ | CHAR_LENGTH('Lit') | LENGTH('Lit') | +--------------------+---------------+ | 3 | 3 | +--------------------+---------------+
Och ofta får vi samma resultat om strängen lagras i en databas:
SELECT CHAR_LENGTH(ArtistName), LENGTH(ArtistName) FROM Artists WHERE ArtistName = 'Lit';
Resultat:
+-------------------------+--------------------+ | CHAR_LENGTH(ArtistName) | LENGTH(ArtistName) | +-------------------------+--------------------+ | 3 | 3 | +-------------------------+--------------------+
Men om vi ändrar databaskolumnen för att lagra data som unicode:
ALTER TABLE Artists MODIFY COLUMN ArtistName VARCHAR(255) unicode;
Och kör sedan samma fråga igen:
SELECT CHAR_LENGTH(ArtistName), LENGTH(ArtistName) FROM Artists WHERE ArtistName = 'Lit';
Vi får ett annat resultat:
+-------------------------+--------------------+ | CHAR_LENGTH(ArtistName) | LENGTH(ArtistName) | +-------------------------+--------------------+ | 3 | 6 | +-------------------------+--------------------+
Detta beror på att unicode lagrar varje tecken som 2 byte.
Detta liknar skillnaden mellan datalength()
och len()
i T-SQL.
MySQL har också octet_length()
funktion, som är en synonym för length()
.