字符串文字、十六进制文字或位值文字可能具有可选的字符集介绍符和
COLLATE
子句,以将其指定为使用特定字符集和排序规则的字符串:
[_charset_name] literal [COLLATE collation_name]
该
表达式的正式名称为
介绍人。它告诉解析器,“后面的字符串使用了字符集
。”介绍人不会像往常那样
将字符串更改为介绍人字符集。它不会更改字符串值,但可能会出现填充。介绍人只是一个信号。
_
charset_name
charset_name
CONVERT()
对于字符串文字,介绍人和字符串之间的空格是允许的,但可选。
对于字符集字面量,介绍符指示后续字符串的字符集,但不会更改解析器在字符串中执行转义处理的方式。转义总是由解析器根据
character_set_connection
. 有关其他讨论和示例,请参阅
第 10.3.6 节,“字符串文字字符集和排序规则”。
例子:
SELECT 'abc';
SELECT _latin1'abc';
SELECT _binary'abc';
SELECT _utf8'abc' COLLATE utf8_danish_ci;
SELECT _latin1 X'4D7953514C';
SELECT _utf8 0x4D7953514C COLLATE utf8_danish_ci;
SELECT _latin1 b'1000001';
SELECT _utf8 0b1000001 COLLATE utf8_danish_ci;
字符集引入器和COLLATE
子句根据标准 SQL 规范实现。
字符串文字可以通过使用_binary
介绍符指定为二进制字符串。默认情况下,十六进制文字和位值文字是二进制字符串,因此_binary
是允许的,但不是必需的。
MySQL通过以下方式确定字符串文字、十六进制文字或位值文字的字符集和排序规则:
如果同时指定了
_charset_name
和 ,则使用字符集 和排序规则 。 必须是 的允许排序规则 。COLLATE
collation_name
charset_name
collation_name
collation_name
charset_name
如果
_charset_name
指定但未COLLATE
指定,则使用字符集charset_name
及其默认排序规则。要查看每个字符集的默认排序规则,请使用SHOW CHARACTER SET
语句或查询INFORMATION_SCHEMA
CHARACTER_SETS
表。如果
_charset_name
未指定但已指定:COLLATE
collation_name
对于字符串文字,使用
character_set_connection
系统变量和排序规则 给定的连接默认字符集collation_name
。collation_name
必须是连接默认字符集允许的排序规则。对于十六进制文字或位值文字,唯一允许的排序规则是
binary
因为默认情况下这些类型的文字是二进制字符串。
否则(既未指定
_charset_name
也未指定):COLLATE
collation_name
对于字符串文字,使用
character_set_connection
和collation_connection
系统变量给出的连接默认字符集和排序规则。对于十六进制文字或位值文字,字符集和排序规则是
binary
.
例子:
具有
latin1
字符集和latin1_german1_ci
排序规则的非二进制字符串:SELECT _latin1'Müller' COLLATE latin1_german1_ci; SELECT _latin1 X'0A0D' COLLATE latin1_german1_ci; SELECT _latin1 b'0110' COLLATE latin1_german1_ci;
具有
utf8
字符集及其默认排序规则(即utf8_general_ci
)的非二进制字符串:SELECT _utf8'Müller'; SELECT _utf8 X'0A0D'; SELECT _utf8 b'0110';
binary
具有字符集及其默认排序规则(即 )的 二进制字符串binary
:SELECT _binary'Müller'; SELECT X'0A0D'; SELECT b'0110';
十六进制字面量和位值字面量不需要引入符,因为它们默认是二进制字符串。
具有连接默认字符集和
utf8_general_ci
排序规则的非二进制字符串(如果连接字符集不是 ,则失败utf8
):SELECT 'Müller' COLLATE utf8_general_ci;
此构造(
COLLATE
仅)不适用于十六进制文字或位文字,因为它们的字符集binary
与连接字符集无关,并且与 排序规则binary
不兼容。utf8_general_ci
在没有介绍人的情况下唯一允许COLLATE
的条款是COLLATE binary
。具有连接默认字符集和排序规则的字符串:
SELECT 'Müller';