# 10.3.8字符集介绍人
字符串文字、十六进制文字或位值文字可以有可选的字符集引入器和整理
子句,将其指定为使用特定字符集和排序规则的字符串:
[_charset_name] literal [COLLATE collation_name]
这个_*
charset_名称*
这个表达形式上被称为介绍人它告诉解析器,“后面的字符串使用字符集*charset_名称
*“介绍人不会像这样将字符串更改为介绍人字符集CONVERT()
可以。虽然可能会出现填充,但它不会更改字符串值。介绍人只是一个信号。
对于字符串文字,介绍人和字符串之间的空格是允许的,但是可选的。
对于字符集文字,介绍人指示以下字符串的字符集,但不会更改解析器在字符串中执行转义处理的方式。转义总是由解析器根据字符集连接
。有关更多讨论和示例,请参阅第10.3.6节,“字符串文字字符集和排序规则”.
例如:
SELECT 'abc';
SELECT _latin1'abc';
SELECT _binary'abc';
SELECT _utf8mb4'abc' COLLATE utf8mb4_danish_ci;
SELECT _latin1 X'4D7953514C';
SELECT _utf8mb4 0x4D7953514C COLLATE utf8mb4_danish_ci;
SELECT _latin1 b'1000001';
SELECT _utf8mb4 0b1000001 COLLATE utf8mb4_danish_ci;
角色集介绍人和整理
子句是根据标准SQL规范实现的。
通过使用_二进制的
介绍人。默认情况下,十六进制文字和位值文字是二进制字符串,所以_二进制的
是允许的,但通常是不必要的。_二进制的
在文本被视为数字的上下文中,将十六进制或位文本保留为二进制字符串可能很有用。例如,在MySQL 8.0及更高版本中,位操作允许使用数字或二进制字符串参数,但默认情况下将十六进制和位文本视为数字。要显式指定此类文本的二进制字符串上下文,请使用_二进制的
至少一个论点的介绍人:
mysql> SET @v1 = X'000D' | X'0BC0';
mysql> SET @v2 = _binary X'000D' | X'0BC0';
mysql> SELECT HEX(@v1), HEX(@v2);
+----------+----------+
| HEX(@v1) | HEX(@v2) |
+----------+----------+
| BCD | 0BCD |
+----------+----------+
两个位操作的显示结果相似,但结果不一致_二进制的
是一个比金
值,而结果是_二进制的
是一个二进制字符串。由于结果类型不同,显示的值也不同:数字结果不显示高阶0位。
MySQL通过以下方式确定字符串文字、十六进制文字或位值文字的字符集和排序规则:
如果两者都有*
_charset_名称
和整理*
排序规则名称*
指定的字符集charset_名称
整理排序规则名称
都用过了。排序规则名称
必须是允许的排序规则charset_名称
*.如果*
_charset_名称
已指定,但整理
未指定,字符集charset_名称
*并使用其默认排序规则。要查看每个字符集的默认排序规则,请使用显示字符集
声明或查询信息模式
字符集
桌子如果*
_charset_名称
*未指定,但整理*
排序规则名称*
具体规定如下:对于字符串文字,连接默认字符集由
字符集连接
系统变量和排序规则*排序规则名称
都用过了。排序规则名称
*必须是连接默认字符集允许的排序规则。对于十六进制文字或位值文字,唯一允许的排序规则是
二进制的
因为默认情况下,这些类型的文本是二进制字符串。
否则(两者都不是*
_charset_名称
*也没有整理*
排序规则名称*
(已指定):例如:
带
拉丁语1
字符集和拉丁语
整理:SELECT _latin1'Müller' COLLATE latin1_german1_ci; SELECT _latin1 X'0A0D' COLLATE latin1_german1_ci; SELECT _latin1 b'0110' COLLATE latin1_german1_ci;
带
utf8mb4
字符集及其默认排序规则(即,utf8mb4_0900_ai_ci
):SELECT _utf8mb4'Müller'; SELECT _utf8mb4 X'0A0D'; SELECT _utf8mb4 b'0110';
带
二进制的
字符集及其默认排序规则(即,二进制的
):SELECT _binary'Müller'; SELECT X'0A0D'; SELECT b'0110';
十六进制文字和位值文字不需要引入符,因为默认情况下它们是二进制字符串。
具有连接默认字符集和
utf8mb4_0900_ai_ci
排序规则(如果未指定连接字符集,则失败)utf8mb4
):SELECT 'Müller' COLLATE utf8mb4_0900_ai_ci;
这个建筑(
整理
仅适用于)不适用于十六进制文字或位文字,因为它们的字符集是二进制的
无论连接字符集是什么二进制的
不符合utf8mb4_0900_ai_ci
整理。唯一允许的整理
没有介绍人的条款是整理二进制文件
.具有连接默认字符集和排序规则的字符串:
SELECT 'Müller';