# 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 的“聚合规则”适用于确定结果的排序规则:
如果一个显式
整理 *
是*
发生,使用*是
*.如果明确
整理 *
是*
和整理 *
Z*
发生,引发错误。否则,如果所有排序规则都是*
是
, 采用是
*.否则,结果没有排序规则。
例如,与
案例... WHEN a THEN b WHEN b THEN c 整理 *
X* 结尾
,得到的排序规则是*X
*.这同样适用于联盟
,||
,连接()
,埃尔特()
,最伟大的()
,如果()
, 和至少()
.对于转换为字符数据的操作,操作产生的字符串的字符集和排序规则由
字符集连接
和collation_connection
确定默认连接字符集和排序规则的系统变量(请参阅第 10.4 节,“连接字符集和排序规则”)。这仅适用于BIN_TO_UUID()
,投掷()
,转换()
,格式()
,十六进制()
, 和空间()
.对于虚拟生成列的表达式,上述原则有一个例外。在这样的表达式中,表字符集用于
BIN_TO_UUID()
,转换()
, 要么十六进制()
结果,无论连接字符集如何。
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 |
+--------------------------+----------------------------+