Documentation Home
MySQL 8.3 Reference Manual
Related Documentation Download this Manual
PDF (US Ltr) - 40.8Mb
PDF (A4) - 40.9Mb
Man Pages (TGZ) - 294.0Kb
Man Pages (Zip) - 409.0Kb
Info (Gzip) - 4.0Mb
Info (Zip) - 4.0Mb
Excerpts from this Manual

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表选项。

  • 对于LOAD DATA语句,如果不包括CHARACTER SET子句,服务器将使用character_set_database系统变量指示的字符集来解释文件中的信息。要覆盖此,请提供明确的CHARACTER SET子句。

  • 对于存储过程(过程和函数),在创建时有效的数据库字符集和排序规则将用作字符数据参数的字符集和排序规则,这些参数的声明中不包括CHARACTER SETCOLLATE属性。要覆盖此,请提供明确的CHARACTER SETCOLLATE