MySQL有许多返回字符串的操作符和函数。本节回答以下问题:这样一个字符串的字符集和排序规则是什么?
对于拍摄字符串输入并将字符串结果返回为输出的简单功能,输出的字符集和排序规则与主输入值的相同。例如,上(
返回具有相同字符串和排序规则的字符串X
)X
。这同样适用于instr()
,LCASE ()
,降低()
,LTRIM()
,中()
,重复()
,替换()
,反向()
,正确的()
,RPAD()
,空白()
,探测法()
,SUBSTRING ()
,修剪()
,UCASE ()
, 和上()
。
的替换()
函数与所有其他函数不同,它总是忽略字符串输入的排序,并执行区分大小写的比较。
如果字符串输入或函数结果是二进制字符串,则该字符串具有二进制
字符集和排序。可以使用charset()
和整理()
函数,两者都返回二进制
对于二进制字符串参数:
mysql> SELECT CHARSET(BINARY 'a'), COLLATION(BINARY 'a');+---------------------+-----------------------+ | 字符集(二进制a) |排序(二进制的 ') | +---------------------+-----------------------+ | 二进制|二进制 | +---------------------+-----------------------+
对于组合多个字符串输入并返回单个字符串输出的操作,”聚合规则”的标准SQL应用于确定结果的排序:
如果一个显式的
整理
时,使用Y
Y
。如果显式
整理
和Y
整理
发生,引发错误。Z
否则,如果所有排序规则都是
Y
, 用Y
。否则,结果没有排序。
例如,案例...当A当B然后C Collate时
,所得到的整理是X
结束X
。这同样适用于联盟
,||
,CONCAT ()
,elt()
,最大的()
,如果()
, 和至少()
。
对于转换为字符数据的操作,由操作中导致的字符串的字符集和排序规定由character_set_connection
和collation_connection
确定默认连接字符集和排序规则的系统变量(参见第10.4节“连接字符集和校集”)。这只适用于把()
,CONV()
,格式()
,十六进制()
, 和空间()
。
从MySQL 5.7.19开始,对于虚拟生成列的表达式来说,上述原则出现了一个例外。在这样的表达式中,表字符集用于CONV()
或者十六进制()
结果,无论连接字符集。
如果对字符串函数返回的结果的字符集或排序有任何疑问,请使用charset()
或者整理()
函数找出:
mysql> SELECT USER(), CHARSET(USER()), COLLATION(USER());+----------------+-----------------+-------------------+ | 用户()|字符集(用户())|排序(用户 ()) | +----------------+-----------------+-------------------+ | test@localhost | utf8 | utf8_general_ci | +----------------+-----------------+-------------------+ mysql >选择字符集(压缩(abc)),排序(压缩(' abc '));+--------------------------+----------------------------+ | 字符集(压缩(abc)) |排序(压缩(abc ')) | +--------------------------+----------------------------+ | 二进制|二进制 | +--------------------------+----------------------------+