# 10.3.3 数据库字符集和排序规则

每个数据库都有一个数据库字符集和一个数据库排序规则。这创建数据库更改数据库语句具有用于指定数据库字符集和排序规则的可选子句:

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]

关键字架构可以用来代替数据库.

字符集整理子句使得在同一个 MySQL 服务器上创建具有不同字符集和排序规则的数据库成为可能。

数据库选项存储在数据字典中,可以通过检查INFORMATION_SCHEMA.SCHEMATA桌子。

例子:

CREATE DATABASE db_name CHARACTER SET latin1 COLLATE latin1_swedish_ci;

MySQL 通过以下方式选择数据库字符集和数据库排序规则:

  • 如果两者字符集 *字符集名称*整理 *collat​​ion_name*已指定,字符集*字符集名称和整理collat​​ion_name*被使用。

  • 如果字符集 *字符集名称*没有指定整理, 字符集*字符集名称*并使用其默认排序规则。要查看每个字符集的默认排序规则,请使用显示字符集声明或查询INFORMATION_SCHEMA CHARACTER_SETS桌子。

  • 如果整理 *collat​​ion_name*没有指定字符集, 与相关的字符集*collat​​ion_name和整理collat​​ion_name*被使用。

  • 否则(两者都不字符集也不整理已指定),则使用服务器字符集和服务器排序规则。

    默认数据库的字符集和排序规则可以从字符集数据库collat​​ion_database系统变量。每当默认数据库更改时,服务器都会设置这些变量。如果没有默认数据库,则变量与对应的服务器级系统变量具有相同的值,character_set_servercollat​​ion_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';

数据库字符集和排序规则会影响服务器操作的这些方面:

  • 为了创建表如果未指定表字符集和排序规则,则数据库字符集和排序规则将用作表定义的默认值。要覆盖它,请提供显式字符集整理表选项。

  • 为了加载数据不包括的陈述字符集子句,服务器使用由字符集数据库系统变量来解释文件中的信息。要覆盖它,请提供显式字符集条款。

  • 对于存储的例程(过程和函数),在例程创建时有效的数据库字符集和排序规则被用作字符数据参数的字符集和排序规则,其声明不包括字符集或一个整理属性。要覆盖它,请提供字符集整理明确地。