美文网首页
[译] MySQL 字符集介绍

[译] MySQL 字符集介绍

作者: 翼徳 | 来源:发表于2017-02-23 11:53 被阅读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 以下列方式确定字符串、十六进制、位值字面值的字符集和排序规则:

  • 如果同时指定了 _charset_name 和 COLLATE collat​​ion_name,则使用字符集 charset_name 和排序规则 collat​​ion_name。 collat​​ion_name 必须是 charset_name 的允许归类。

  • 如果指定了 _charset_name 但未指定 COLLATE,则使用字符集charset_name 及其缺省归类。要查看每个字符集的默认排序规则,请使用 SHOW CHARACTER SET
    语句。

  • 如果未指定 _charset_name 但指定了 COLLATE collat​​ion_name:

    • 对于字符串值,使用由 character_set_connection
      系统变量和排序规则collat​​ion_name 给出的连接缺省字符集。collat​​ion_name 必须是连接默认字符集的允许排序规则。

    • 对于十六进制或位值字面值,唯一允许的排序规则是二进制的,因为默认情况下这些类型的文字是二进制字符串。

  • 否则(既不指定 _charset_name 也不指定 COLLATE collat​​ion_name):

示例:

  • 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';
  • 二进制字符集和其默认排序规则(即二进制)的二进制字符串:
SELECT _binary'Müller';
SELECT X'0A0D';
SELECT b'0110';

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

  • 连接默认字符集和 utf8_general_ci 排序规则的非二进制字符串(如果连接字符集不是 utf8 则失败):
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”]。

相关文章

  • [译] MySQL 字符集介绍

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

  • 字符集与校对规则

    MySQL字符集及校对规则的理解 阅读目录:MySQL的字符集和校对规则 MySQL的字符集 MySQL与字符集 ...

  • MySQL 字符集设置

    Linux系统环境 MySQL字符集介绍 1、字符集是一套文字符号及其编码、比较规则的集合。 2、MySQL数据库...

  • MySQL校对规则(COLLATION)的具体使用

    简介 本文介绍MySQL的校对规则。 MySQL的校对规则 两个不同的字符集不能有相同的校对规则。 每个字符集有一...

  • Mysql字符集介绍

    使用Navicate图形化界面工具 字符集 字符集的由来 ​ 计算机只能识别二进制代码无论是计算机程序...

  • MySQL字符排序

    关于MySQL字符集 可以参考文章MySQL字符集 & 重谈MySQL字符集 目录 大小写 比较规则 大小写 _c...

  • Mysql全备、增量备份及恢复

    Mysql字符集 MySQL数据库字符集包括字符集(CHARACTER)和校对规则(COLLATION)两个概念,...

  • MySQL常见问题汇集

    字符集mysql 字符集(CHARACTER SET)和校对集(COLLATE)mysql 中 character...

  • Mysql字符集设置

    mysql字符集编码

  • 八、MySQL字符集

    字符集和排序规则简介   MySQL提供了多种字符集和排序规则选择,其中字符集设置和数据存储以及客户端与MySQL...

网友评论

      本文标题:[译] MySQL 字符集介绍

      本文链接:https://www.haomeiwen.com/subject/aihmwttx.html