Dans MySQL, le OCTET_LENGTH()
La fonction renvoie la longueur d'une chaîne, mesurée en octets.
Cette fonction est en fait synonyme de LENGTH()
.
Syntaxe
La syntaxe de base ressemble à ceci :
OCTET_LENGTH(str)
Où str
est la chaîne dont vous voulez renvoyer la longueur.
Exemple
SELECT OCTET_LENGTH('Cat');
Résultat :
+---------------------+ | OCTET_LENGTH('Cat') | +---------------------+ | 3 | +---------------------+
C'est le même résultat que nous obtiendrions si nous utilisions le CHAR_LENGTH()
une fonction. Cependant, le OCTET_LENGTH()
fonction peut renvoyer des résultats différents, selon le type de données.
Types de données
Lorsque vous interrogez une base de données, le OCTET_LENGTH()
La fonction peut renvoyer un résultat différent, selon le type de données. Les chaînes Unicode renvoient le double du nombre d'octets. Les chaînes UTF-8 peuvent varier.
Voici un exemple d'utilisation d'UTF-8 :
SELECT CHAR_LENGTH(_utf8 '€'), OCTET_LENGTH(_utf8 '€');
Résultats :
+--------------------------+---------------------------+ | CHAR_LENGTH(_utf8 '€') | OCTET_LENGTH(_utf8 '€') | +--------------------------+---------------------------+ | 1 | 3 | +--------------------------+---------------------------+
Dans ce cas, la longueur du caractère est de 1, mais la longueur de l'octet est de 3 octets.
Dans l'exemple suivant, nous interrogeons une base de données. Dans ce cas, le ArtistName
la colonne utilise varchar(255) type de données :
SELECT OCTET_LENGTH(ArtistName) FROM Artists WHERE ArtistName = 'Lit';
Le résultat ressemble donc à ceci :
+--------------------------+ | OCTET_LENGTH(ArtistName) | +--------------------------+ | 3 | +--------------------------+
Cependant, si nous changeons la colonne en ucs2
, chaque caractère sera représenté par un code Unicode de 2 octets, et donc le résultat sera différent.
Pour illustrer, nous pouvons modifier le tableau comme ceci :
SELECT OCTET_LENGTH(ArtistName) ALTER TABLE Artists MODIFY COLUMN ArtistName VARCHAR(255) CHARSET ucs2;
Maintenant, si nous l'interrogeons à nouveau :
SELECT OCTET_LENGTH(ArtistName) FROM Artists WHERE ArtistName = 'Lit';
Résultat :
+--------------------------+ | OCTET_LENGTH(ArtistName) | +--------------------------+ | 6 | +--------------------------+
Espaces de fin
Le OCTET_LENGTH()
fonction compte les blancs de fin (tels que les espaces à la fin de la chaîne). Ainsi, si nous ajoutons un espace à la fin du premier exemple, nous obtenons le résultat suivant :
SELECT LENGTH('Cat ');
Résultat :
+----------------+ | LENGTH('Cat ') | +----------------+ | 4 | +----------------+
Espaces vides
Nous obtenons le même résultat avec des espaces en début de chaîne (par exemple, des espaces en début de chaîne) :
SELECT LENGTH(' Cat');
Résultat :
+----------------+ | LENGTH(' Cat') | +----------------+ | 4 | +----------------+
À moins bien sûr que nous n'utilisions une fonction telle que TRIM()
, RTRIM()
, ou LTRIM()
pour couper l'espace blanc.
Exemple :
SELECT LENGTH(RTRIM('Cat '));
Résultat :
+-----------------------+ | LENGTH(RTRIM('Cat ')) | +-----------------------+ | 3 | +-----------------------+
Plus d'exemples
Voici quelques exemples de différentes chaînes :
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';
Résultat :
+----------+----------+----------+----------+----------+ | Result 1 | Result 2 | Result 3 | Result 4 | Result 5 | +----------+----------+----------+----------+----------+ | 10 | 0 | 7 | 3 | 0 | +----------+----------+----------+----------+----------+
Notez que les résultats 4 et 5 sont différents car j'ai utilisé le TRIM()
fonction pour couper l'espace blanc du résultat 5. Étant donné que la chaîne ne se compose que d'espaces blancs, la longueur de la chaîne coupée est 0
.
Transact-SQL (pour SQL Server, Azure) a une fonction similaire à LENGTH()
de MySQL et OCTET_LENGTH()
fonctions, mais dans T-SQL, il s'appelle DATALENGTH()
.