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