MySQL LENGTH() 和 CHAR_LENGTH() 函数有什么区别?
mysqlmysqli database
这两个函数都是字符串函数,返回字符串中存在的字符数。但它们的概念不同,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)