文档首页
MySQL 8.4 参考手册
相关文档 下载本手册
PDF (US Ltr) - 39.9Mb
PDF (A4) - 40.0Mb
手册页 (TGZ) - 258.5Kb
手册页 (Zip) - 365.5Kb
Info (Gzip) - 4.0Mb
Info (Zip) - 4.0Mb


MySQL 8.4 参考手册  /  ...  /  数据库字符集和排序规则

12.3.3 数据库字符集和排序规则

每个数据库都有一个数据库字符集和一个数据库排序规则。 CREATE DATABASEALTER DATABASE 语句具有可选子句,用于指定数据库字符集和排序规则

CREATE DATABASE db_name
    [[DEFAULT] CHARACTER SET charset_name]
    [[DEFAULT] COLLATE collation_name]

ALTER DATABASE db_name
    [[DEFAULT] CHARACTER SET charset_name]
    [[DEFAULT] COLLATE collation_name]

关键字 SCHEMA 可用于代替 DATABASE

CHARACTER SETCOLLATE 子句使创建具有不同字符集和排序规则的数据库成为可能,这些数据库位于同一 MySQL 服务器上。

数据库选项存储在数据字典中,可以通过检查 Information Schema SCHEMATA 表来检查它们。

示例

CREATE DATABASE db_name CHARACTER SET latin1 COLLATE latin1_swedish_ci;

MySQL 以以下方式选择数据库字符集和数据库排序规则

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

  • 如果指定了 CHARACTER SET charset_name 但没有指定 COLLATE,则使用字符集 charset_name 及其默认排序规则。要查看每个字符集的默认排序规则,请使用 SHOW CHARACTER SET 语句或查询 INFORMATION_SCHEMA CHARACTER_SETS 表。

  • 如果指定了 COLLATE collation_name 但没有指定 CHARACTER SET,则使用与 collation_name 关联的字符集和排序规则 collation_name

  • 否则(既没有指定 CHARACTER SET 也没有指定 COLLATE),则使用服务器字符集和服务器排序规则。

默认数据库的字符集和排序规则可以从 character_set_databasecollation_database 系统变量的值确定。服务器在默认数据库更改时设置这些变量。如果没有默认数据库,则这些变量的值与相应的服务器级系统变量 character_set_servercollation_server 相同。

要查看给定数据库的默认字符集和排序规则,请使用以下语句

USE db_name;
SELECT @@character_set_database, @@collation_database;

或者,要显示值而不更改默认数据库,请使用以下语句

SELECT DEFAULT_CHARACTER_SET_NAME, DEFAULT_COLLATION_NAME
FROM INFORMATION_SCHEMA.SCHEMATA WHERE SCHEMA_NAME = 'db_name';

数据库字符集和排序规则会影响服务器操作的以下方面

  • 对于 CREATE TABLE 语句,如果未指定表字符集和排序规则,则数据库字符集和排序规则将用作表定义的默认值。要覆盖此行为,请提供显式 CHARACTER SETCOLLATE 表选项。

  • 对于不包含 CHARACTER SET 子句的 LOAD DATA 语句,服务器使用由 character_set_database 系统变量指示的字符集来解释文件中的信息。要覆盖此行为,请提供显式 CHARACTER SET 子句。

  • 对于存储例程(过程和函数),在例程创建时生效的数据库字符集和排序规则将用作声明不包含 CHARACTER SETCOLLATE 属性的字符数据参数的字符集和排序规则。要覆盖此行为,请显式提供 CHARACTER SETCOLLATE