[译] MySQL 字符集介绍

2017-02-23  本文已影响54人  翼徳

原文的地址:https://dev.mysql.com/doc/refman/5.6/en/charset-introducer.html

字符串、十六进制、位(Bit)的字面值可以设置 introducer 的字符集和 COLLATE 配置,以将其指定为使用特定字符集和 collation 的字符串:

[_charset_name] literal [COLLATE collation_name]

字符集 introducer 和 COLLATE 子句是根据标准 SQL 规范实现的。

示例:

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;

_charset_name 表达式被称为 introducer。它告诉解析器,“以下字符串使用字符集 _charset_name。” introducer 不会像 CONVERT()
一样将字符串改为 introducer 所代表的字符集。虽然可能会发生填充,但它不会更改字符串值。introducer 只是一个标记。

对于字符串值,introducer 和字符串之间的空格是允许的,但是可选。

可以使用 _binary introducer 将字符串值指定为二进制字符串。默认情况下,十六进制、位值都是二进制字符串,因此允许 _binary,但不必要。

MySQL 以下列方式确定字符串、十六进制、位值字面值的字符集和排序规则:

示例:

SELECT _latin1'Müller' COLLATE latin1_german1_ci;
SELECT _latin1 X'0A0D' COLLATE latin1_german1_ci;
SELECT _latin1 b'0110' COLLATE latin1_german1_ci;  
SELECT _utf8'Müller';
SELECT _utf8 X'0A0D';
SELECT _utf8 b'0110';
SELECT _binary'Müller';
SELECT X'0A0D';
SELECT b'0110';

十六进制和位值文字不需要 introducer ,因为它们本身就是二进制字符串。

SELECT 'Müller' COLLATE utf8_general_ci;

此构造(仅COLLATE)不适用于十六进制或位类型,因为它们的字符集是二进制的,不管连接字符集,并且二进制与 utf8_general_ci 排序规则不兼容。缺少 introducer 时,唯一允许的 COLLATE 条件是 COLLATE 是二进制。

SELECT 'Müller';

对于字符集字面量,introducer 指示以下字符串的字符集,但不会更改解析器在字符串中执行转义处理的方式。转义总是由解析器根据 character_set_connection 给出的字符集进行解释。有关其他讨论和示例,请参见 [Section 10.1.3.6, “Character String Literal Character Set and Collation”]。

上一篇 下一篇

猜你喜欢

热点阅读