暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

MySQL的函数和运算符 - 字符串函数和运算符 - 函数结果的字符集与排序规则

林员外聊编程 2021-06-26
211
函数结果的字符集与排序规则
 
MySQL 有许多返回字符串的操作符和函数。本部分回答以下问题:返回字符串的字符集和排序规则是什么?
 
对于接受字符串输入并返回字符串结果作为输出的简单函数,输出的字符集和排序规则与主输入值相同。例如,UPPER(X) 返回与 X 相同的字符串和排序规则。这同样适用于 INSTR()LCASE()LOWER()LTRIM()MID()REPEAT()REPLACE()REVERSE()RIGHT()RPAD()RTRIM()SOUNDEX()SUBSTRING()TRIM()UCASE() UPPER()
 
注意
 
REPLACE() 函数与所有其他函数不同,它总是忽略字符串输入的排序规则,并执行区分大小写的比较。
 
如果字符串输入或函数结果是二进制字符串,则该字符串具有二进制字符集和排序规则。这可以通过使用 CHARSET() COLLATION() 函数来检查,对于二进制字符串参数它们都返回 binary :
 
mysql> SELECT CHARSET(BINARY 'a'), COLLATION(BINARY 'a');
+---------------------+-----------------------+
| CHARSET(BINARY 'a') | COLLATION(BINARY 'a') |
+---------------------+-----------------------+
| binary | binary |
+---------------------+-----------------------+
 
对于有多个字符串输入并返回单个字符串输出的操作,使用标准 SQL 的“聚合规则”确定结果字符串的排序规则:
 
● 如果出现显式的 COLLATE Y,则使用 Y
 
● 如果出现显式的 COLLATE Y  COLLATE Z,则引发错误。
 
● 如果所有排序规则都是 Y,则使用 Y
 
● 否则,结果没有排序规则。
 
例如,使用 CASE ... WHEN a THEN b WHEN b THEN c COLLATE X END 时,结果的排序规则是 X。这同样适用于 UNION||CONCAT()ELT()GREATEST()IF() LEAST()
 
对于转换为字符数据的操作,由操作产生的字符串的字符集和排序规则由决定默认连接字符集和排序规则的 character_set_connection collation_connection 系统变量定义。这只适用于 BIN_TO_UUID()CAST()CONV()FORMAT()HEX() SPACE()
 
对用于虚拟生成列的表达式,上述原则会出现例外。在这样的表达式中,表字符集用于 BIN_TO_UUID()CONV() HEX() 的结果,而不考虑连接字符集。
 
如果对字符串函数返回结果的字符集或排序有任何问题,请使用 CHARSET() COLLATION() 函数来查找:
 
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 |
+--------------------------+----------------------------+
 
 
 
官方文档:
https://dev.mysql.com/doc/refman/8.0/en/string-functions-charset.html
文章转载自林员外聊编程,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论