sql >> Database teknologi >  >> RDS >> Mysql

Sådan fungerer OCTET_LENGTH()-funktionen i MySQL

I MySQL er OCTET_LENGTH() funktion returnerer længden af ​​en streng, målt i bytes.

Denne funktion er faktisk et synonym for LENGTH() .

Syntaks

Den grundlæggende syntaks lyder sådan her:

OCTET_LENGTH(str)

Hvor str er den streng, som du vil have længden returneret for.

Eksempel

SELECT OCTET_LENGTH('Cat');

Resultat:

+---------------------+
| OCTET_LENGTH('Cat') |
+---------------------+
|                   3 |
+---------------------+

Dette er det samme resultat, som vi ville få, hvis vi brugte CHAR_LENGTH() fungere. Men OCTET_LENGTH() funktion kan returnere forskellige resultater afhængigt af datatypen.

Datatyper

Når du forespørger i en database, vises OCTET_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 
  CHAR_LENGTH(_utf8 '€'),
  OCTET_LENGTH(_utf8 '€');

Resultater:

+--------------------------+---------------------------+
| CHAR_LENGTH(_utf8 '€')   | OCTET_LENGTH(_utf8 '€')   |
+--------------------------+---------------------------+
|                        1 |                         3 |
+--------------------------+---------------------------+

I dette tilfælde er tegnlængden 1, men oktetlængden er 3 bytes.

I det følgende eksempel forespørger vi en database. I dette tilfælde er ArtistName kolonne bruger varchar(255) datatype:

SELECT OCTET_LENGTH(ArtistName) 
FROM Artists
WHERE ArtistName = 'Lit';

Så resultatet ser således ud:

+--------------------------+
| OCTET_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 OCTET_LENGTH(ArtistName) 
ALTER TABLE Artists 
MODIFY COLUMN ArtistName VARCHAR(255) CHARSET ucs2;

Hvis vi nu spørger det igen:

SELECT OCTET_LENGTH(ArtistName) 
FROM Artists
WHERE ArtistName = 'Lit';

Resultat:

+--------------------------+
| OCTET_LENGTH(ArtistName) |
+--------------------------+
|                        6 |
+--------------------------+

Tilsluttede emner

 OCTET_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('Cat ');

Resultat:

+----------------+
| LENGTH('Cat ') |
+----------------+
|              4 |
+----------------+

Leading Blanks

Vi får det samme resultat med indledende tomme felter (f.eks. mellemrum i begyndelsen af ​​strengen):

SELECT LENGTH(' Cat');

Resultat:

+----------------+
| LENGTH(' Cat') |
+----------------+
|              4 |
+----------------+

Medmindre vi selvfølgelig bruger en funktion såsom TRIM() , RTRIM() , eller LTRIM() for at trimme mellemrummet.

Eksempel:

SELECT LENGTH(RTRIM('Cat '));

Resultat:

+-----------------------+
| LENGTH(RTRIM('Cat ')) |
+-----------------------+
|                     3 |
+-----------------------+

Flere eksempler

Her er nogle eksempler på forskellige strenge:

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 |
+----------+----------+----------+----------+----------+

Bemærk, at resultater 4 og 5 er forskellige, fordi jeg brugte TRIM() funktion til at trimme mellemrummet fra resultat 5. Da strengen kun består af mellemrum, er længden af ​​den trimmede streng 0 .

Transact-SQL (til SQL Server, Azure) har en funktion, der ligner MySQL's LENGTH() og OCTET_LENGTH() funktioner, men i T-SQL hedder det  DATALENGTH() .


  1. Sådan håndteres Ruby on Rails-fejl:Installer venligst postgresql-adapteren:`gem install activerecord-postgresql-adapter'

  2. Sådan opretter du forbindelse til SQL-serverdatabase fra en Windows 10 UWP-app

  3. Google BigQuery ODBC-driver

  4. MySQL:ALTER IGNORE TABLE TILFØJ UNIK, hvad vil blive afkortet?