# 12.8.3 字符集与函数结果整理

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

对于接受字符串输入并返回字符串结果作为输出的简单函数,输出的字符集和排序规则与主要输入值的相同。例如,上(*X*)返回具有相同字符串和排序规则的字符串*X*.这同样适用于指令(),LCASE(),降低(),LTRIM(),中(),重复(),代替(),逆转(),正确的(),RPAD(),RTRIM(),声音(),子串(),修剪(),UCASE(), 和上().

笔记

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

如果字符串输入或函数结果是二进制字符串,则该字符串具有二进制字符集和排序规则。这可以通过使用字符集()整理()两个函数都返回二进制对于二进制字符串参数:

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

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

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