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使您可以更改数据库的总体 Feature。这些 Feature 存储在数据库目录的db.opt
文件中。该语句要求对数据库具有ALTER特权。 ALTER SCHEMA是ALTER DATABASE的同义词。
在第一种语法中可以省略数据库名称,在这种情况下,该语句适用于默认数据库。如果没有默认数据库,则会发生错误。
字符集和排序规则选项
CHARACTER SET
子句更改默认数据库字符集。 COLLATE
子句更改默认数据库排序规则。有关字符集和排序规则名称的信息,请参见第 10 章,字符集,排序规则,Unicode。
要查看可用的字符集和排序规则,请分别使用显示字符集和SHOW 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 中实现的编码将数据库名称 Map 到数据库目录名称(请参见第 9.2.4 节“将标识符 Map 到文件名”)。本条款在以下条件下使用:
-
它旨在将 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
(采用旧格式)的名称为#mysql50#a-b-c
,并且您必须使用#mysql50#
前缀来引用该名称。在这种情况下,请使用UPGRADE DATA DIRECTORY NAME
明确告诉服务器将数据库目录名称重新编码为当前编码格式:
ALTER DATABASE `#mysql50#a-b-c` UPGRADE DATA DIRECTORY NAME;
执行此语句后,您可以将数据库命名为a-b-c
,而没有特殊的#mysql50#
前缀。
Note
UPGRADE DATA DIRECTORY NAME
子句在 MySQL 5.7 中已弃用,在 MySQL 8.0 中已删除。如果需要转换 MySQL 5.0 数据库或 table 名,一种解决方法是在升级到 MySQL 8.0 之前将 MySQL 5.0 安装升级到 MySQL 5.1.