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

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

这两个函数都是字符串函数,返回字符串中的字符数。但它们在概念上有所不同,CHAR_LENGTH()函数测量“字符”的字符串长度,而LENGTH()函数测量“字节”的字符串长度。换句话说,我们可以说CHAR_LENGTH()函数是多字节安全的,即它忽略了字符是单字节还是多字节的。例如,如果一个字符串包含四个2字节的字符,则LENGTH()函数将返回8,而CHAR_LENGTH()函数将返回4。从这个意义上讲,CHAR_LENGTH()比LENGTH()函数给出更精确的结果。

这种差异尤其与Unicode有关,在其中大多数字符都编码为两个字节或与UTF-8相关的字节数不同。在下面的示例中说明了这一点−

阅读更多:MySQL 教程

示例

在下面的示例中,首先将字符串“Gaurav”转换为UCS2(Unicode并包含2字节字符)字符集。然后我们可以从结果集中观察到差异,即LENGTH()返回字节数,而CHAR_LENGTH()返回字符数。

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)

现在,在下面的示例中,我们使用了UTF-8中的特殊字符,其字节数不同,这是一种字符集。然后,我们可以从结果集中观察到差异。

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)

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程