Dans MariaDB, LENGTH()
est une fonction de chaîne intégrée qui renvoie la longueur de l'argument de chaîne donné.
En mode par défaut, la longueur de la chaîne est mesurée en octets. Mais en mode Oracle, il est mesuré en caractères.
Syntaxe
La syntaxe ressemble à ceci :
LENGTH(str)
Où str
est la chaîne dont la longueur sera renvoyée.
Exemple
Voici un exemple de base :
SELECT LENGTH('café');
Résultat :
+-----------------+ | LENGTH('café') | +-----------------+ | 5 | +-----------------+
Dans ce cas, la chaîne comportait quatre caractères, mais LENGTH()
a renvoyé 5
.
C'est parce que le dernier caractère utilise deux octets, et j'utilise le mode SQL par défaut (mon sql_mode=DEFAULT
). En mode SQL par défaut, LENGTH()
renvoie le nombre d'octets.
Mode Oracle
Le passage en mode Oracle entraîne LENGTH()
renvoyant uniquement le nombre de caractères dans la chaîne (par opposition au nombre d'octets).
Basculons notre session en mode Oracle :
SET SESSION sql_mode='ORACLE';
Et maintenant, lançons le précédent LENGTH()
encore un exemple :
SELECT LENGTH('café');
Résultat :
+-----------------+ | LENGTH('café') | +-----------------+ | 4 | +-----------------+
Cette fois, il renvoie le nombre de caractères (4) au lieu du nombre d'octets (5).
En mode Oracle, LENGTH()
renvoie le même résultat que CHAR_LENGTH()
et son synonyme, CHARACTER_LENGTH()
.
Comparaison avec CHAR_LENGTH()
et BIT_LENGTH()
Revenons au mode par défaut :
SET SESSION sql_mode=DEFAULT;
Voici une comparaison rapide entre LENGTH()
en mode par défaut, CHAR_LENGTH()
et BIT_LENGTH()
qui renvoie le nombre de bits dans une chaîne :
SELECT
LENGTH('อ'),
CHAR_LENGTH('อ'),
BIT_LENGTH('อ');
Résultat :
+---------------+--------------------+-------------------+ | LENGTH('อ') | CHAR_LENGTH('อ') | BIT_LENGTH('อ') | +---------------+--------------------+-------------------+ | 3 | 1 | 24 | +---------------+--------------------+-------------------+
Ce caractère thaï (อ
) utilise 3 octets, et donc LENGTH()
renvoie 3
.
CHAR_LENGTH()
renvoie 1
, car il ne s'agit toujours que d'un seul caractère, et BIT_LENGTH()
renvoie le nombre de bits (24
).
Encore une fois, si nous avions été en mode Oracle, LENGTH()
aurait renvoyé la même chose que CHAR_LENGTH()
.
Non-chaînes
Si l'argument n'est pas une chaîne, il est converti en chaîne.
Voici un autre exemple qui utilise un nombre :
SELECT LENGTH(1234);
Résultat :
+--------------+ | LENGTH(1234) | +--------------+ | 4 | +--------------+
Arguments nuls
Passer null
renvoie null
:
SELECT LENGTH(null);
Résultat :
+--------------+ | LENGTH(null) | +--------------+ | NULL | +--------------+
Argument manquant
Appel de LENGTH()
sans passer d'argument génère une erreur :
SELECT LENGTH();
Résultat :
ERROR 1582 (42000): Incorrect parameter count in the call to native function 'LENGTH'