10.3.4 table 格字符集和排序规则

每个 table 都有一个 table 字符集和一个 table 排序规则。 CREATE TABLEALTER TABLE语句具有用于指定 table 字符集和排序规则的可选子句:

CREATE TABLE tbl_name (column_list)
    [[DEFAULT] CHARACTER SET charset_name]
    [COLLATE collation_name]]

ALTER TABLE tbl_name
    [[DEFAULT] CHARACTER SET charset_name]
    [COLLATE collation_name]

Example:

CREATE TABLE t1 ( ... )
CHARACTER SET latin1 COLLATE latin1_danish_ci;

MySQL 通过以下方式选择 table 字符集和排序规则:

  • 如果同时指定了CHARACTER SET charset_nameCOLLATE collation_name,则使用字符集* charset_name 和排序规则 collation_name *。

  • 如果指定的CHARACTER SET charset_name不带COLLATE,则使用字符集* charset_name *及其默认排序规则。要查看每个字符集的默认排序规则,请使用显示字符集语句或查询INFORMATION_SCHEMA CHARACTER_SETStable。

  • 如果指定的COLLATE collation_name不带CHARACTER SET,则使用与* collation_name 和归类 collation_name *关联的字符集。

  • 否则(既未指定CHARACTER SET也未指定COLLATE),则使用数据库字符集和排序规则。

如果未在单个列定义中指定列字符集和排序规则,则将 table 字符集和排序规则用作列定义的默认值。table 字符集和排序规则是 MySQL 的扩展;标准 SQL 中没有这样的东西。