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


这两个函数都是字符串函数,都返回字符串中存在的字符数量。但它们在概念上有所不同:CHAR_LENGTH() 函数以“字符”为单位测量字符串长度,而 LENGTH() 函数以“字节”为单位测量字符串长度。换句话说,我们可以说 CHAR_LENGTH() 函数是多字节安全的,即它忽略字符是单字节还是多字节。例如,如果一个字符串包含四个 2 字节字符,那么 LENGTH()。

函数将返回 8,而 CHAR_LENGTH() 函数将返回 4。从这个意义上说,我们可以说 CHAR_LENGTH() 比 LENGTH() 函数给出更精确的结果。

这种差异对于 Unicode 尤其重要,在 Unicode 中,大多数字符都编码为两个字节,或者对于 UTF-8 尤其重要,在 UTF-8 中,字节数是可变的。以下示例演示了这一点:

示例

在下面的这个例子中,首先,字符串“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)

更新于: 2020年6月20日

3K+ 次查看

开启你的 职业生涯

通过完成课程获得认证

开始学习
广告