En av de många funktionerna i MySQL är LENGTH()
funktion, som returnerar längden på en sträng, mätt i byte.
Exempel:
SELECT LENGTH('Lit');
Resultat:
+---------------+ | LENGTH('Lit') | +---------------+ | 3 | +---------------+
Detta är ett enkelt exempel och resultatet är detsamma som om vi hade använt CHAR_LENGTH()
fungera. Men LENGTH()
funktion kan returnera olika resultat, beroende på datatyp.
Datatyper
När du frågar en databas visas LENGTH()
funktion kan returnera ett annat resultat, beroende på datatypen. Unicode-strängar returnerar dubbelt så många byte. UTF-8-strängar kan variera.
Här är ett exempel på hur man använder UTF-8:
SELECT LENGTH(_utf8 '€');
Resultat:
+---------------------+ | LENGTH(_utf8 '€') | +---------------------+ | 3 | +---------------------+
I det här fallet använder eurotecknet 3 byte.
I följande exempel frågar vi en databas. I det här fallet, ArtistName
kolumnen använder varchar(255) datatyp:
SELECT LENGTH(ArtistName) FROM Artists WHERE ArtistName = 'Lit';
Så resultatet ser ut så här:
+--------------------+ | LENGTH(ArtistName) | +--------------------+ | 3 | +--------------------+
Men om vi ändrar kolumnen till ucs2
, kommer varje tecken att representeras av en 2 byte Unicode-kod, och därför blir resultatet annorlunda.
För att demonstrera kan vi ändra tabellen så här:
SELECT LENGTH(ArtistName) ALTER TABLE Artists MODIFY COLUMN ArtistName VARCHAR(255) CHARSET ucs2;
Om vi nu frågar det igen:
SELECT LENGTH(ArtistName) FROM Artists WHERE ArtistName = 'Lit';
Resultat:
+--------------------+ | LENGTH(ArtistName) | +--------------------+ | 6 | +--------------------+
Avslutande ämnen
Den LENGTH()
funktion räknar efterföljande blanksteg (som blanksteg i slutet av strängen). Så om vi lägger till ett mellanslag i slutet av det första exemplet får vi följande resultat:
SELECT LENGTH('Lit ');
Resultat:
+----------------+ | LENGTH('Lit ') | +----------------+ | 4 | +----------------+
Leading Blanks
Vi får samma resultat med inledande blanksteg (t.ex. mellanslag i början av strängen):
SELECT LENGTH(' Lit');
Resultat:
+----------------+ | LENGTH(' Lit') | +----------------+ | 4 | +----------------+
Transact-SQL (för SQL Server, Azure) har en liknande funktion, men i T-SQL heter den DATALENGTH()
.