En af de mange funktioner i MySQL er LENGTH()
funktion, som returnerer længden af en streng, målt i bytes.
Eksempel:
SELECT LENGTH('Lit');
Resultat:
+---------------+ | LENGTH('Lit') | +---------------+ | 3 | +---------------+
Dette er et simpelt eksempel, og resultatet er det samme, som hvis vi havde brugt CHAR_LENGTH()
fungere. Men LENGTH()
funktion kan returnere forskellige resultater afhængigt af datatypen.
Datatyper
Når du forespørger i en database, vises LENGTH()
funktion kan returnere et andet resultat, afhængigt af datatypen. Unicode-strenge returnerer det dobbelte antal bytes. UTF-8-strenge kan variere.
Her er et eksempel på brug af UTF-8:
SELECT LENGTH(_utf8 '€');
Resultater:
+---------------------+ | LENGTH(_utf8 '€') | +---------------------+ | 3 | +---------------------+
I dette tilfælde bruger eurotegnet 3 bytes.
I det følgende eksempel forespørger vi en database. I dette tilfælde er ArtistName
kolonne bruger varchar(255) datatype:
SELECT LENGTH(ArtistName) FROM Artists WHERE ArtistName = 'Lit';
Så resultatet ser således ud:
+--------------------+ | LENGTH(ArtistName) | +--------------------+ | 3 | +--------------------+
Men hvis vi ændrer kolonnen til ucs2
, vil hvert tegn være repræsenteret af en 2 byte Unicode-kode, og derfor vil resultatet være anderledes.
For at demonstrere kan vi ændre tabellen sådan her:
SELECT LENGTH(ArtistName) ALTER TABLE Artists MODIFY COLUMN ArtistName VARCHAR(255) CHARSET ucs2;
Hvis vi nu spørger det igen:
SELECT LENGTH(ArtistName) FROM Artists WHERE ArtistName = 'Lit';
Resultat:
+--------------------+ | LENGTH(ArtistName) | +--------------------+ | 6 | +--------------------+
Tilsluttede emner
LENGTH()
funktion tæller efterstillede blanktegn (såsom mellemrum for enden af strengen). Så hvis vi tilføjer et mellemrum til slutningen af det første eksempel, får vi følgende resultat:
SELECT LENGTH('Lit');
Resultat:
+----------------+ | LENGTH('Lit ') | +----------------+ | 4 | +----------------+
Leading Blanks
Vi får det samme resultat med indledende tomme felter (f.eks. mellemrum i begyndelsen af strengen):
SELECT LENGTH(' Lit');
Resultat:
+----------------+ | LENGTH(' Lit') | +----------------+ | 4 | +----------------+
Transact-SQL (til SQL Server, Azure) har en lignende funktion, men i T-SQL hedder det DATALENGTH()
.