10.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
。
所有数据库选项都存储在名为db.opt
的文本文件中,该文件可在数据库目录中找到。
CHARACTER SET
和COLLATE
子句可以在同一 MySQL 服务器上创建具有不同字符集和排序规则的数据库。
Example:
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
*及其默认排序规则。要查看每个字符集的默认排序规则,请使用显示字符集语句或查询INFORMATION_SCHEMA
CHARACTER_SETStable。 -
如果指定的
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语句,如果未指定 table 字符集和排序规则,则将数据库字符集和排序规则用作 table 定义的默认值。要覆盖此设置,请提供显式的
CHARACTER SET
和COLLATE
table 选项。 -
对于不包含
CHARACTER SET
子句的LOAD DATA语句,服务器使用character_set_database系统变量指示的字符集来解释文件中的信息。要覆盖此内容,请提供一个明确的CHARACTER SET
子句。 -
对于存储的例程(过程和函数),将在例程创建时生效的数据库字符集和排序规则用作声明不包含
CHARACTER SET
或COLLATE
属性的字符数据参数的字符集和排序规则。要覆盖它,请显式提供CHARACTER SET
和COLLATE
。