MySQL中有许多操作符和函数可以返回字符串。本节回答这个问题:返回的字符串使用什么字符集和 校对规则?

对于简单的函数,即接收字符串输入然后返回一个字符串结果作为输出的函数,输出的字符集和校对规则与原始输入的相同。例如,UPPERX返回一个字符串,其字符和 校对规则与X相同。类似的函数还有INSTR()LCASE()LOWER()LTRIM()MID()REPEAT()REPLACE()REVERSE()RIGHT()RPAD()RTRIM()SOUNDEX()SUBSTRING()TRIM()UCASE()UPPER()。(还需要注意:REPLACE()函数不同于其它函数,它总是忽略输入字符串的 校对规则,并且进行大小写不敏感的比较。)

对于合并多个字符串输入并且返回单个字符串输出的运算,应用标准SQL“聚合规则”:

·         如果存在显式的校对规则X,那么使用X

·         如果存在显式的校对规则XY,那么产生一个错误。

·         否则,如果全部校对规则是X,那么使用X

·         其它情况,结果没有校对规则。

例如,使用CASE ... WHEN a THEN b WHEN b THEN c COLLATE X END。结果校对规则是X。对于CASEUNION||CONCAT()ELT()GREATEST()IF()LEAST()情况相同。

对于转换为字符数据的运算,从运算得到的结果字符串的字符集和校对规则由character_set_connectioncollation_connection系统变量定义。这适用于CAST()CHAR()CONV()FORMAT()HEX()SPACE()函数。