Documentation Home
MySQL 8.0 参考手册  / 第 12 章函数和运算符  / 12.8 字符串函数和运算符  /  12.8.3 函数结果的字符集和整理

12.8.3 函数结果的字符集和整理

MySQL 有许多返回字符串的运算符和函数。本节回答问题:这样一个字符串的字符集和排序规则是什么?

对于接受字符串输入并返回字符串结果作为输出的简单函数,输出的字符集和排序规则与主要输入值的字符集和排序规则相同。例如, 返回与 具有相同字符串和排序规则的字符串 。这同样适用于 , , , , , , , , , , , , , , 和 。 UPPER(X)XINSTR()LCASE()LOWER()LTRIM()MID()REPEAT()REPLACE()REVERSE()RIGHT()RPAD()RTRIM()SOUNDEX()SUBSTRING()TRIM()UCASE()UPPER()

笔记

与所有其他函数不同,该REPLACE()函数始终忽略字符串输入的排序规则并执行区分大小写的比较。

如果字符串输入或函数结果是二进制字符串,则该字符串具有binary字符集和排序规则。这可以通过使用 CHARSET()COLLATION()函数来检查,这两个函数都返回binary一个二进制字符串参数:

mysql> SELECT CHARSET(BINARY 'a'), COLLATION(BINARY 'a');
+---------------------+-----------------------+
| CHARSET(BINARY 'a') | COLLATION(BINARY 'a') |
+---------------------+-----------------------+
| binary              | binary                |
+---------------------+-----------------------+

对于组合多个字符串输入并返回单个字符串输出的操作,标准 SQL 的聚合规则适用于确定结果的排序规则:

  • 如果发生显式,请使用 . COLLATE YY

  • 如果显式并发生,则引发错误。 COLLATE YCOLLATE Z

  • 否则,如果所有排序规则都是 Y,请使用 Y

  • 否则,结果没有排序规则。

例如,对于,生成的排序规则是。这同样适用于, , , , , 和 。 CASE ... WHEN a THEN b WHEN b THEN c COLLATE X ENDXUNION||CONCAT()ELT()GREATEST()IF()LEAST()

对于转换为字符数据的操作,操作产生的字符串的字符集和排序 规则由确定默认连接字符集和排序规则的系统变量定义(请参阅character_set_connection10.4 节,“连接字符集和排序规则”) . 这仅适用于、 、 、 、 和 。 collation_connectionBIN_TO_UUID()CAST()CONV()FORMAT()HEX()SPACE()

虚拟生成列的表达式会出现上述原则的例外情况。在此类表达式中,表字符集用于 BIN_TO_UUID()CONV()HEX()结果,而不管连接字符集如何。

如果对字符串函数返回的结果的字符集或排序规则有任何疑问,请使用 CHARSET()COLLATION()函数查找:

mysql> SELECT USER(), CHARSET(USER()), COLLATION(USER());
+----------------+-----------------+--------------------+
| USER()         | CHARSET(USER()) | COLLATION(USER())  |
+----------------+-----------------+--------------------+
| test@localhost | utf8mb3         | utf8mb3_general_ci |
+----------------+-----------------+--------------------+
mysql> SELECT CHARSET(COMPRESS('abc')), COLLATION(COMPRESS('abc'));
+--------------------------+----------------------------+
| CHARSET(COMPRESS('abc')) | COLLATION(COMPRESS('abc')) |
+--------------------------+----------------------------+
| binary                   | binary                     |
+--------------------------+----------------------------+