MySQL有许多返回字符串的操作符和函数。本节回答这个问题:这样的字符串的字符集和排序规则是什么?
对于接受字符串输入并返回字符串结果作为输出的简单函数,输出的字符集和排序规则与主输入值的字符集和排序规则相同。例如,上(
返回一个字符串,其字符串和排序规则与X
)X
.同样适用于INSTR ()
,LCASE ()
,低()
,LTRIM ()
,中期()
,重复()
,替换()
,反向()
,正确的()
,RPAD ()
,空白()
,探测法()
,SUBSTRING ()
,削减()
,UCASE ()
,上()
.
的替换()
Function与所有其他函数不同,它总是忽略字符串输入的排序规则,并执行区分大小写的比较。
如果字符串输入或函数结果是二进制字符串,则该字符串具有二进制
字符集和排序规则。可以使用字符集()
而且排序()
函数,两者都返回二进制
对于二进制字符串参数:
SELECT CHARSET(二进制'a'), COLLATION(二进制'a');+---------------------+-----------------------+ | 字符集(二进制a) |排序(二进制的 ') | +---------------------+-----------------------+ | 二进制|二进制 | +---------------------+-----------------------+
对于组合多个字符串输入并返回单个字符串输出的操作,则使用”聚合规则”的标准SQL语句应用于确定结果的整理:
如果一个显式的
核对
时,使用Y
Y
.如果显式
核对
而且Y
核对
发生时,引发错误。Z
否则,如果所有排序规则都是
Y
,使用Y
.否则,结果就没有排序规则。
例如,使用情况……WHEN a THEN b WHEN b THEN c核对
,得到的排序规则为X
结束X
.同样适用于联盟
,||
,CONCAT ()
,英语教学()
,最大的()
,如果()
,至少()
.
对于转换为字符数据的操作,由操作产生的字符串的字符集和排序规则由character_set_connection
而且collation_connection
决定默认连接字符集和排序规则的系统变量(请参见第10.4节,“连接字符集和排序规则”).这只适用于BIN_TO_UUID ()
,把()
,CONV ()
,FORMAT ()
,十六进制()
,空间()
.
对于虚拟生成的列的表达式,会出现上述原则的例外。在这样的表达式中,表字符集用于BIN_TO_UUID ()
,CONV ()
,或十六进制()
结果,无论连接字符集。
如果对字符串函数返回的结果的字符集或排序规则有任何问题,请使用字符集()
或排序()
函数找出:
SELECT USER(), CHARSET(), COLLATION(), USER();+----------------+-----------------+-------------------+ | 用户()|字符集(用户())|排序(用户 ()) | +----------------+-----------------+-------------------+ | test@localhost | utf8 | utf8_general_ci | +----------------+-----------------+-------------------+ mysql >选择字符集(压缩(abc)),排序(压缩(' abc '));+--------------------------+----------------------------+ | 字符集(压缩(abc)) |排序(压缩(abc ')) | +--------------------------+----------------------------+ | 二进制|二进制 | +--------------------------+----------------------------+