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