Documentation Home
MySQL 8.0 参考手册  / 第 13 章 SQL 语句  / 13.1 数据定义语句  /  13.1.1 ALTER DATABASE 语句

13.1.1 ALTER DATABASE 语句

ALTER {DATABASE | SCHEMA} [db_name]
    alter_option ...
ALTER {DATABASE | SCHEMA} db_name
    UPGRADE DATA DIRECTORY NAME

alter_option: {
    [DEFAULT] CHARACTER SET [=] charset_name
  | [DEFAULT] COLLATE [=] collation_name
}

ALTER DATABASE使您能够更改数据库的整体特征。这些特征存储在db.opt数据库目录中的文件中。此语句需要 ALTER对数据库的特权。 ALTER SCHEMA是的同义词ALTER DATABASE

数据库名称可以从第一个语法中省略,在这种情况下,该语句适用于默认数据库。如果没有默认数据库,则会发生错误。

字符集和排序规则选项

CHARACTER SET子句更改默认数据库字符集。该COLLATE子句更改默认数据库排序规则。有关字符集和排序规则名称的信息,请参阅第 10 章,字符集、排序规则、Unicode

要查看可用的字符集和排序规则,请分别使用 SHOW CHARACTER SETSHOW COLLATION语句。请参阅第 13.7.5.3 节,“SHOW CHARACTER SET 语句”第 13.7.5.4 节,“SHOW COLLATION 语句”

创建例程时使用数据库默认值的存储例程包括这些默认值作为其定义的一部分。(在存储例程中,如果未明确指定字符集或排序规则,则具有字符数据类型的变量使用数据库默认值。请参阅第 13.1.16 节,“CREATE PROCEDURE 和 CREATE FUNCTION 语句”。)如果更改默认字符集或对于数据库的排序规则,必须删除并重新创建任何要使用新默认值的存储例程。

从 MySQL 5.1 之前的版本升级

包含该UPGRADE DATA DIRECTORY NAME子句的语法更新与数据库关联的目录名称,以使用 MySQL 5.1 中实现的编码将数据库名称映射到数据库目录名称(请参阅 第 9.2.4 节,“标识符到文件名的映射”)。本条款适用于以下条件:

  • 它用于将 MySQL 从旧版本升级到 5.1 或更高版本。

  • 如果名称包含需要编码的特殊字符,则旨在将数据库目录名称更新为当前编码格式。

  • 该语句由 mysqlcheck 使用(由mysql_upgrade调用)。

例如,如果 MySQL 5.0 中的数据库名称为 a-b-c,则该名称包含 -(破折号)字符的实例。在 MySQL 5.0 中,数据库目录也被命名为a-b-c,这不一定对所有文件系统都是安全的。在 MySQL 5.1 及更高版本中,相同的数据库名称被编码为a@002db@002dc 生成文件系统中立的目录名称。

当 MySQL 安装从旧版本升级到 MySQL 5.1 或更高版本时,服务器会显示一个名称,例如 a-b-c(旧格式)as #mysql50#a-b-c,您必须使用#mysql50#前缀引用该名称。在这种情况下使用 UPGRADE DATA DIRECTORY NAME明确告诉服务器将数据库目录名称重新编码为当前编码格式:

ALTER DATABASE `#mysql50#a-b-c` UPGRADE DATA DIRECTORY NAME;

执行此语句后,您可以引用 a-b-c没有特殊 #mysql50#前缀的数据库。

笔记

UPGRADE DATA DIRECTORY NAME子句在 MySQL 5.7 中已弃用,并在 MySQL 8.0 中删除。如果需要转换 MySQL 5.0 数据库或表名,解决方法是先将 MySQL 5.0 安装升级到 MySQL 5.1,然后再升级到 MySQL 8.0。