数据库字符集和校验规则
每个数据库都有一个数据库字符集和一个数据库校验规则。该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
and COLLATE
子句可以在同一MySQL服务器上创建具有不同字符集和校验规则的数据库。
数据库选项存储在数据字典中,可以通过检查INFORMATION_SCHEMA.SCHEMATA
表进行检查。
例:
CREATE DATABASE db_nameCHARACTER SET latin1COLLATE 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_NAMEFROM INFORMATION_SCHEMA.SCHEMATAWHERE SCHEMA_NAME = 'db_name';
数据库字符集和校验规则会影响服务器操作的这些方面:
- 对于
CREATE TABLE
语句,如果未指定表字符集和校验规则,则将数据库字符集和校验规则用作表定义的默认值。要覆盖此内容,请提供显式CHARACTER SET
和COLLATE
表选项。 - 对于
LOAD DATA
不包含CHARACTER SET
子句的语句,服务器使用character_set_database
系统变量指示的字符集来解释文件中的信息。要覆盖此内容,请提供一个显式CHARACTER SET
子句。 - 对于存储的例程(过程和函数),将在例程创建时生效的数据库字符集和校验规则用作声明不包含
CHARACTER SET
或COLLATE
属性的字符数据参数的字符集和校验规则。要覆盖此内容,请提供CHARACTER SET
并COLLATE
明确提供。