I MySQL er der mange gange, hvor length()
funktionen og char_length()
funktion vil give nøjagtig de samme resultater. Der er dog også tidspunkter, hvor resultaterne vil være helt anderledes. Her er hvorfor.
For det første er her definitionen for hver af disse funktioner:
char_length()
- Returnerer længden af en streng, målt i tegn.
length()
- Returnerer længden af en streng, målt i bytes.
Bemærk "tegn" vs "bytes" - en måles i tegn , den anden måles i bytes .
I mange tilfælde vil antallet af bytes være det samme som antallet af tegn i strengen, men dette er ikke altid tilfældet. Antallet af brugte bytes pr. tegn afhænger af, hvordan dataene er lagret. For eksempel, hvis strengen er gemt som Unicode-data, vil der være 2 bytes pr. tegn.
Her er et grundlæggende eksempel, der bruger ASCII-tekst (hvor begge funktioner returnerer det samme resultat):
SELECT CHAR_LENGTH('Lit'), LENGTH('Lit');
Resultat:
+--------------------+---------------+ | CHAR_LENGTH('Lit') | LENGTH('Lit') | +--------------------+---------------+ | 3 | 3 | +--------------------+---------------+
Og ofte vil vi få det samme resultat, hvis strengen er gemt i en database:
SELECT CHAR_LENGTH(ArtistName), LENGTH(ArtistName) FROM Artists WHERE ArtistName = 'Lit';
Resultat:
+-------------------------+--------------------+ | CHAR_LENGTH(ArtistName) | LENGTH(ArtistName) | +-------------------------+--------------------+ | 3 | 3 | +-------------------------+--------------------+
Men hvis vi ændrer databasekolonnen for at gemme dataene som unicode:
ALTER TABLE Artists MODIFY COLUMN ArtistName VARCHAR(255) unicode;
Og kør derefter den samme forespørgsel igen:
SELECT CHAR_LENGTH(ArtistName), LENGTH(ArtistName) FROM Artists WHERE ArtistName = 'Lit';
Vi får et andet resultat:
+-------------------------+--------------------+ | CHAR_LENGTH(ArtistName) | LENGTH(ArtistName) | +-------------------------+--------------------+ | 3 | 6 | +-------------------------+--------------------+
Dette skyldes, at unicode gemmer hvert tegn som 2 bytes.
Dette svarer til forskellen mellem datalength()
og len()
i T-SQL.
MySQL har også octet_length()
funktion, som er et synonym for length()
.