I MySQL, OCTET_LENGTH()
funktion returnerar längden på en sträng, mätt i byte.
Denna funktion är faktiskt en synonym till LENGTH()
.
Syntax
Den grundläggande syntaxen ser ut så här:
OCTET_LENGTH(str)
Där str
är strängen som du vill att längden ska returneras för.
Exempel
SELECT OCTET_LENGTH('Cat');
Resultat:
+---------------------+ | OCTET_LENGTH('Cat') | +---------------------+ | 3 | +---------------------+
Det här är samma resultat som vi skulle få om vi använde CHAR_LENGTH()
fungera. Men OCTET_LENGTH()
funktion kan returnera olika resultat, beroende på datatyp.
Datatyper
När du frågar efter en databas visas OCTET_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 CHAR_LENGTH(_utf8 '€'), OCTET_LENGTH(_utf8 '€');
Resultat:
+--------------------------+---------------------------+ | CHAR_LENGTH(_utf8 '€') | OCTET_LENGTH(_utf8 '€') | +--------------------------+---------------------------+ | 1 | 3 | +--------------------------+---------------------------+
I det här fallet är teckenlängden 1, men oktettlängden är 3 byte.
I följande exempel frågar vi en databas. I det här fallet, ArtistName
kolumnen använder varchar(255) datatyp:
SELECT OCTET_LENGTH(ArtistName) FROM Artists WHERE ArtistName = 'Lit';
Så resultatet ser ut så här:
+--------------------------+ | OCTET_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 OCTET_LENGTH(ArtistName) ALTER TABLE Artists MODIFY COLUMN ArtistName VARCHAR(255) CHARSET ucs2;
Om vi nu frågar det igen:
SELECT OCTET_LENGTH(ArtistName) FROM Artists WHERE ArtistName = 'Lit';
Resultat:
+--------------------------+ | OCTET_LENGTH(ArtistName) | +--------------------------+ | 6 | +--------------------------+
Avslutande ämnen
Den OCTET_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('Cat ');
Resultat:
+----------------+ | LENGTH('Cat ') | +----------------+ | 4 | +----------------+
Leading Blanks
Vi får samma resultat med inledande blanksteg (t.ex. mellanslag i början av strängen):
SELECT LENGTH(' Cat');
Resultat:
+----------------+ | LENGTH(' Cat') | +----------------+ | 4 | +----------------+
Såvida vi inte använder en funktion som TRIM()
, RTRIM()
, eller LTRIM()
för att trimma blanktecken.
Exempel:
SELECT LENGTH(RTRIM('Cat '));
Resultat:
+-----------------------+ | LENGTH(RTRIM('Cat ')) | +-----------------------+ | 3 | +-----------------------+
Fler exempel
Här är några exempel på olika strängar:
SELECT OCTET_LENGTH('Quiet Riot') AS 'Result 1', OCTET_LENGTH('') AS 'Result 2', OCTET_LENGTH('1234 7') AS 'Result 3', OCTET_LENGTH(' ') AS 'Result 4', OCTET_LENGTH(TRIM(' ')) AS 'Result 5';
Resultat:
+----------+----------+----------+----------+----------+ | Result 1 | Result 2 | Result 3 | Result 4 | Result 5 | +----------+----------+----------+----------+----------+ | 10 | 0 | 7 | 3 | 0 | +----------+----------+----------+----------+----------+
Observera att resultat 4 och 5 är olika eftersom jag använde TRIM()
funktion för att trimma blanksteg från resultat 5. Eftersom strängen bara består av blanksteg är längden på den trimmade strängen 0
.
Transact-SQL (för SQL Server, Azure) har en liknande funktion som MySQL:s LENGTH()
och OCTET_LENGTH()
funktioner, men i T-SQL heter det DATALENGTH()
.