这很奇怪。根据 MySQL 开发者网站 -
返回字符串 str 的长度,以字符为单位。多字节字符计为单个字符。这意味着对于包含五个 2 字节字符的字符串,LENGTH() 返回 10,而 CHAR_LENGTH() 返回 5。
这显然意味着 CHAR_LENGTH(str) 的输出与字符集无关。
现在如给出 -
我可以使用介绍器来设置字符串的 SET CHARACTER SET,如 -
选择“ABC”;
选择_latin1'abc';
选择 _binary'abc';
选择 _utf8mb4'abc' 整理 utf8mb4_danish_ci;
就我而言,我采用字符串文字“Hello”,使用介绍器将其设置为 CHARACTER SET,并将其用作 MySQL CHAR_LENGTH(str) 函数的参数。但奇怪的是,当使用不同的字符集时,它有时会产生不同的输出。例子 -
SELECT CHAR_LENGTH(_utf8mb4"Hello") AS character_length;
+------------------+
| character_length |
+------------------+
| 5 |
+------------------+
SELECT CHAR_LENGTH(_latin1"Hello") AS character_length;
+------------------+
| character_length |
+------------------+
| 5 |
+------------------+
SELECT CHAR_LENGTH(_ucs2"Hello") AS character_length;
+------------------+
| character_length |
+------------------+
| 3 |
+------------------+
这里,“你好”有 5 个字符。CHARACTER SETS _utf8mb4 和 _latin1 正确显示字符数。但是 CHARACTER SET _ucs2 奇怪地将数字 0f 字符显示为 3。
这是怎么回事?