12.3.3 数据库字符集和排序规则
每个数据库都有一个数据库字符集和数据库排序规则。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 服务器上创建具有不同字符集和排序规则的数据库。
数据库选项存储在数据字典中,可以通过检查信息架构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
相关的字符集和排序规则。 -
否则(既不指定
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
表选项。 -
LOAD DATA
语句如果不包含CHARACTER SET
子句,服务器将使用character_set_database
系统变量指定的字符集来解释文件中的信息。要覆盖这个设置,请提供明确的CHARACTER SET
子句。 -
对于存储程序(过程和函数),在创建时生效的数据库字符集和排序规则将被用作不包含
CHARACTER SET
或COLLATE
属性的字符数据参数的字符集和排序规则。要覆盖这个设置,请提供明确的CHARACTER SET
和COLLATE
。