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() .