# 10.3.4 表格字符集和排序规则

每个表都有一个表字符集和一个表排序规则。这创建表更改表语句具有用于指定表字符集和排序规则的可选子句:

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]

例子:

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

MySQL 以下列方式选择表字符集和排序规则:

  • 如果两者字符集 *字符集名称*整理 *collat​​ion_name*已指定,字符集*字符集名称和整理collat​​ion_name*被使用。

  • 如果字符集 *字符集名称*没有指定整理, 字符集*字符集名称*并使用其默认排序规则。要查看每个字符集的默认排序规则,请使用显示字符集声明或查询INFORMATION_SCHEMA CHARACTER_SETS桌子。

  • 如果整理 *collat​​ion_name*没有指定字符集, 与相关的字符集*collat​​ion_name和整理collat​​ion_name*被使用。

  • 否则(两者都不字符集也不整理指定),使用数据库字符集和排序规则。

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