# 10.3.6字符串文字字符集和排序
每个字符串文字都有一个字符集和一个排序规则。
简单地说选择'*
一串*'
,字符串具有连接默认字符集和字符集连接
和校对连接
系统变量。
字符串文字可以有可选的字符集引入器和整理
子句,将其指定为使用特定字符集和排序规则的字符串:
[_charset_name]'string' [COLLATE collation_name]
这个_*
charset_名称*
这个表达形式上被称为介绍人它告诉解析器,“后面的字符串使用字符集*charset_名称
*“介绍人不会像这样将字符串更改为介绍人字符集CONVERT()
可以。虽然可能会出现填充,但它不会更改字符串值。介绍人只是一个信号。看见第10.3.8节,“字符集介绍人”.
例如:
SELECT 'abc';
SELECT _latin1'abc';
SELECT _binary'abc';
SELECT _utf8mb4'abc' COLLATE utf8mb4_danish_ci;
角色集介绍人和整理
子句是根据标准SQL规范实现的。
MySQL通过以下方式确定字符串文本的字符集和排序规则:
如果两者都有*
_charset_名称
和整理*
排序规则名称*
指定的字符集charset_名称
整理排序规则名称
都用过了。排序规则名称
必须是允许的排序规则charset_名称
*.如果*
_charset_名称
已指定,但整理
未指定,字符集charset_名称
*并使用其默认排序规则。要查看每个字符集的默认排序规则,请使用显示字符集
声明或查询信息模式
字符集
桌子如果*
_charset_名称
未指定,但整理*
排序规则名称*
指定的连接默认字符集字符集连接
系统变量和排序规则排序规则名称
都用过了。排序规则名称
*必须是连接默认字符集允许的排序规则。否则(两者都不是*
_charset_名称
*也没有整理*
排序规则名称*
的连接默认字符集和排序规则字符集连接
和校对连接
使用系统变量。例如:
带有
拉丁语1
字符集和拉丁语
整理:SELECT _latin1'Müller' COLLATE latin1_german1_ci;
带有
utf8mb4
字符集及其默认排序规则(即,utf8mb4_0900_ai_ci
):SELECT _utf8mb4'Müller';
带有
二进制的
字符集及其默认排序规则(即,二进制的
):SELECT _binary'Müller';
具有连接默认字符集和
utf8mb4_0900_ai_ci
排序规则(如果未指定连接字符集,则失败)utf8mb4
):SELECT 'Müller' COLLATE utf8mb4_0900_ai_ci;
具有连接默认字符集和排序规则的字符串:
SELECT 'Müller';
介绍人指示以下字符串的字符集,但不会更改解析器在字符串中执行转义处理的方式。转义总是由解析器根据
字符集连接
.以下示例显示转义处理使用
字符集连接
即使有介绍人在场。这些例子使用定名
(哪些变化字符集连接
,如中所述第10.4节,“连接字符集和排序规则”),并使用十六进制()
函数,以便可以看到确切的字符串内容。例1:
mysql> SET NAMES latin1;
mysql> SELECT HEX('à\n'), HEX(_sjis'à\n');
+------------+-----------------+
| HEX('à\n') | HEX(_sjis'à\n') |
+------------+-----------------+
| E00A | E00A |
+------------+-----------------+
在这里à
(十六进制值)E0
)然后是\n
,换行符的转义序列。使用字符集连接
价值拉丁语1
生成文字换行符(十六进制值0A
).即使是第二个字符串也会发生这种情况。就是_sjis
介绍人不会影响解析器的转义处理。
例2:
mysql> SET NAMES sjis;
mysql> SELECT HEX('à\n'), HEX(_latin1'à\n');
+------------+-------------------+
| HEX('à\n') | HEX(_latin1'à\n') |
+------------+-------------------+
| E05C6E | E05C6E |
+------------+-------------------+
在这里字符集连接
是sjis
,一种字符集,其中à
然后\
(十六进制值)05
和5C
)是有效的多字节字符。因此,字符串的前两个字节被解释为单个字节sjis
性格,以及\
不会被解释为转义字符。下面n
(十六进制值)6E
)不会被解释为转义序列的一部分。即使是第二个字符串也是如此;这个_拉丁语1
介绍人不影响转义处理。