sql >> Databasteknik >  >> RDS >> Mysql

Hur funktionen OCTET_LENGTH() fungerar i MySQL

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


  1. Databasdesign för flerspråkiga applikationer

  2. Jämföra metoder för strängdelning/sammansättning

  3. Konvertera PostgreSQL-array till PHP-array

  4. Hur man inaktiverar en främmande nyckelbegränsning i SQL Server (T-SQL-exempel)