Mysql
 sql >> Base de données >  >> RDS >> Mysql

Fonctionnement de la fonction OCTET_LENGTH() dans MySQL

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)

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