Maison >base de données >tutoriel mysql >Quelle est la différence entre les fonctions MySQL LENGTH() et CHAR_LENGTH() ?

Quelle est la différence entre les fonctions MySQL LENGTH() et CHAR_LENGTH() ?

WBOY
WBOYavant
2023-09-02 16:57:071210parcourir

MySQL LENGTH() 和 CHAR_LENGTH() 函数有什么区别?

Ces deux fonctions sont des fonctions de chaîne et renvoient le nombre de caractères présents dans la chaîne. Mais ils diffèrent en ce que la fonction CHAR_LENGTH() mesure la longueur de la chaîne en « caractères » tandis que la fonction LENGTH() mesure la longueur de la chaîne en « octets ». En d’autres termes, nous pouvons dire que la fonction CHAR_LENGTH() est multi-octets, c’est-à-dire qu’elle ignore si un caractère est sur un seul octet ou sur plusieurs octets. Par exemple, si une chaîne contient quatre caractères de 2 octets, LENGTH().

Cette fonction renverra 8, tandis que la fonction CHAR_LENGTH() renverra 4. En ce sens, on peut dire que CHAR_LENGTH() donne des résultats plus précis que la fonction LENGTH().

Cette différence est particulièrement pertinente pour Unicode, où la plupart des caractères sont codés sur deux octets, ou pour UTF-8, où le nombre d'octets varie. L'exemple ci-dessous montre -

Exemple

Dans l'exemple ci-dessous, d'abord, la chaîne 'Gaurav' est convertie en ucs2 strong>, qui est le jeu de caractères Unicode sur 2 octets. Nous pouvons alors observer la différence dans le jeu de résultats, c'est-à-dire LENGTH() renvoie la longueur en octets, tandis que CHAR_LENGTH() renvoie la longueur en caractères.

mysql> SET @A = CONVERT('Gaurav' USING ucs2);
Query OK, 0 rows affected (0.15 sec)

mysql> Select Char_length(@A), LENGTH(@A);

+-----------------+------------+
| Char_length(@A) | LENGTH(@A) |
+-----------------+------------+
| 6               | 12         |
+-----------------+------------+

1 row in set (0.03 sec)

Maintenant, dans l'exemple ci-dessous, nous utilisons des caractères spéciaux dans UTF-8, le nombre d'octets dans le jeu de caractères varie. Nous pouvons alors observer les différences par rapport à l’ensemble de résultats.

mysql> SET @B = CONVERT('©' USING utf8);
Query OK, 0 rows affected (0.15 sec)

mysql> Select CHAR_LENGTH(@B);

+-----------------------+
| CHAR_LENGTH(@B)       |
+-----------------------+
| 1                     |
+-----------------------+

1 row in set (0.00 sec)

mysql> Select LENGTH(@B);

+---------------+
| LENGTH(@B)    |
+---------------+
| 2             |
+---------------+

1 row in set (0.00 sec)

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer