### 13.1.12 创建数据库语句

[](<>)[](<>)[](<>)[](<>)[](<>)[](<>)[](<>)

```
CREATE {DATABASE | SCHEMA} [IF NOT EXISTS] db_name
    [create_option] ...

create_option: [DEFAULT] {
    CHARACTER SET [=] charset_name
  | COLLATE [=] collation_name
  | ENCRYPTION [=] {'Y' | 'N'}
}
```

[`创建数据库`](create-database.html)创建具有给定名称的数据库。要使用此语句，您需要[`创建`](privileges-provided.html#priv_create)数据库的权限。[`创建模式`](create-database.html)是同义词[`创建数据库`](create-database.html).

如果数据库存在并且您没有指定，则会发生错误`如果不存在`.

[`创建数据库`](create-database.html)在具有活动的会话中是不允许的[`锁定表`](lock-tables.html)陈述。

每个*`创建选项`*指定数据库特征。数据库特征存储在数据字典中。

-   这`字符集`选项指定默认的数据库字符集。这`整理`选项指定默认的数据库排序规则。有关字符集和排序规则名称的信息，请参阅[第 10 章，*字符集、排序规则、Unicode*](charset.html).

    要查看可用的字符集和排序规则，请使用[`显示字符集`](show-character-set.html)和[`显示整理`](show-collation.html)声明，分别。看[第 13.7.7.3 节，“SHOW CHARACTER SET 语句”](show-character-set.html)， 和[第 13.7.7.4 节，“SHOW COLLATION 语句”](show-collation.html).

-   这`加密`MySQL 8.0.16 中引入的选项定义了默认的数据库加密，该加密由数据库中创建的表继承。允许的值为`'是'`（启用加密）和`'N'`（禁用加密）。如果`加密`选项未指定，的值[`default_table_encryption`](server-system-variables.html#sysvar_default_table_encryption)系统变量定义默认的数据库加密。如果[`table_encryption_privilege_check`](server-system-variables.html#sysvar_table_encryption_privilege_check)系统变量启用时，[`TABLE_ENCRYPTION_ADMIN`](privileges-provided.html#priv_table-encryption-admin)需要特权才能指定不同于[`default_table_encryption`](server-system-variables.html#sysvar_default_table_encryption)环境。有关详细信息，请参阅[为模式和通用表空间定义加密默认值](innodb-data-encryption.html#innodb-schema-tablespace-encryption-default).

    MySQL 中的数据库被实现为包含与数据库中的表相对应的文件的目录。由于最初创建数据库时没有表，因此[`创建数据库`](create-database.html)语句仅在 MySQL 数据目录下创建一个目录。允许的数据库名称的规则在[第 9.2 节，“架构对象名称”](identifiers.html).如果数据库名称包含特殊字符，则数据库目录的名称包含这些字符的编码版本，如[第 9.2.4 节，“标识符到文件名的映射”](identifier-mapping.html).

    通过在数据目录下手动创建目录来创建数据库目录（例如，使用**mkdir**) 在 MySQL 8.0 中不受支持。

    创建数据库时，让服务器管理目录和其中的文件。直接操作数据库目录和文件可能会导致不一致和意外结果。

[](<>)[](<>)

MySQL 对数据库的数量没有限制。底层文件系统可能对目录的数量有限制。

[](<>)

您还可以使用[**mysql管理员**](mysqladmin.html)创建数据库的程序。看[第 4.5.2 节，“mysqladmin - MySQL 服务器管理程序”](mysqladmin.html).
