众所周知,MySQL OCTET_LENGTH()函数还以“字节”为单位测量字符串长度,因此,它是MySQLLENGTH()
函数的同义词。该函数的语法为OCTET_LENGTH(Str),其中Str是一个字符串,必须返回其长度(以字符为单位)。
它也不是多字节安全的LENGTH()
函数。例如,如果一个字符串包含四个2个字节的字符,则OCTET_LENGTH()函数将返回8。在下面的示例中进行了演示-
mysql> Select OCTET_LENGTH('nhooo'); +--------------------------------+ | OCTET_LENGTH('nhooo') | +--------------------------------+ | 14 | +--------------------------------+ 1 row in set (0.00 sec)
上面的结果集显示字符串'nhooo'的长度为14,因为它尚未转换为Unicode字符。以下查询将其转换为Unicode字符-
mysql> SET @A = CONVERT('nhooo' USING ucs2);
在将字符串转换为Unicode后,其结果为28,而不是14,因为在Unicode中,单个字符占用2个字节,如下所示-
mysql> Select OCTET_LENGTH(@A); +------------------+ | OCTET_LENGTH(@A) | +------------------+ | 28 | +------------------+ 1 row in set (0.00 sec)