I MariaDB, LENGTH()
är en inbyggd strängfunktion som returnerar längden på det givna strängargumentet.
I standardläge mäts längden på strängen i byte. Men i Oracle-läge mäts det i tecken.
Syntax
Syntaxen ser ut så här:
LENGTH(str)
Där str
är strängen för vilken längden kommer att returneras.
Exempel
Här är ett grundläggande exempel:
SELECT LENGTH('café');
Resultat:
+-----------------+ | LENGTH('café') | +-----------------+ | 5 | +-----------------+
I det här fallet var strängen fyra tecken lång, men LENGTH()
returnerade 5
.
Detta beror på att det sista tecknet använder två byte, och jag använder standard SQL-läge (min sql_mode=DEFAULT
). I standardläge för SQL, LENGTH()
returnerar antalet byte.
Oracle Mode
Att byta till Oracle-läge resulterar i LENGTH()
returnerar bara antalet tecken i strängen (i motsats till antalet byte).
Låt oss byta vår session till Oracle-läge:
SET SESSION sql_mode='ORACLE';
Och låt oss nu köra föregående LENGTH()
exempel igen:
SELECT LENGTH('café');
Resultat:
+-----------------+ | LENGTH('café') | +-----------------+ | 4 | +-----------------+
Den här gången returnerar den antalet tecken (4) istället för antalet byte (5).
I Oracle-läge, LENGTH()
returnerar samma resultat som CHAR_LENGTH()
och dess synonym, CHARACTER_LENGTH()
.
Jämförelse med CHAR_LENGTH()
och BIT_LENGTH()
Låt oss växla tillbaka till standardläget:
SET SESSION sql_mode=DEFAULT;
Här är en snabb jämförelse mellan LENGTH()
i standardläge, CHAR_LENGTH()
och BIT_LENGTH()
som returnerar antalet bitar i en sträng:
SELECT
LENGTH('อ'),
CHAR_LENGTH('อ'),
BIT_LENGTH('อ');
Resultat:
+---------------+--------------------+-------------------+ | LENGTH('อ') | CHAR_LENGTH('อ') | BIT_LENGTH('อ') | +---------------+--------------------+-------------------+ | 3 | 1 | 24 | +---------------+--------------------+-------------------+
Detta thailändska tecken (อ
) använder 3 byte, och därför LENGTH()
returnerar 3
.
CHAR_LENGTH()
returnerar 1
, eftersom det fortfarande bara är ett enda tecken och BIT_LENGTH()
returnerar antalet bitar (24
).
Återigen, om vi hade varit i Oracle-läge, LENGTH()
skulle ha returnerat samma som CHAR_LENGTH()
.
Icke-strängar
Om argumentet inte är en sträng, konverteras det till en sträng.
Här är ett annat exempel som använder ett nummer:
SELECT LENGTH(1234);
Resultat:
+--------------+ | LENGTH(1234) | +--------------+ | 4 | +--------------+
Nollargument
Skickar null
returnerar null
:
SELECT LENGTH(null);
Resultat:
+--------------+ | LENGTH(null) | +--------------+ | NULL | +--------------+
Argument saknas
Anropar LENGTH()
utan att skicka ett argument resulterar det i ett fel:
SELECT LENGTH();
Resultat:
ERROR 1582 (42000): Incorrect parameter count in the call to native function 'LENGTH'