每个数据库都有一个数据库字符集和一个数据库排序规则。CREATE DATABASE
和 ALTER 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 SET
和 COLLATE
子句使得在同一 MySQL 服务器上创建具有不同字符集和排序规则的数据库成为可能。
数据库选项存储在数据字典中,可以通过检查 Information Schema SCHEMATA
表来查看。
示例
CREATE DATABASE db_name CHARACTER SET latin1 COLLATE latin1_swedish_ci;
MySQL 以以下方式选择数据库字符集和数据库排序规则
如果同时指定了
CHARACTER SET
和charset_name
COLLATE
,则使用字符集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_database
和 collation_database
系统变量的值中确定。服务器在默认数据库发生更改时设置这些变量。如果没有默认数据库,则这些变量的值与相应的服务器级系统变量(character_set_server
和 collation_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 SET
和COLLATE
表选项。对于不包含
CHARACTER SET
子句的LOAD DATA
语句,服务器使用character_set_database
系统变量指示的字符集来解释文件中的信息。要覆盖此设置,请提供显式的CHARACTER SET
子句。对于存储例程(过程和函数),在例程创建时生效的数据库字符集和排序规则用作字符数据参数的字符集和排序规则,这些参数的声明中不包含
CHARACTER SET
或COLLATE
属性。要覆盖此设置,请显式提供CHARACTER SET
和COLLATE
。