ALTER {DATABASE | SCHEMA} [db_name]
alter_specification ...
ALTER {DATABASE | SCHEMA} db_name
UPGRADE DATA DIRECTORY NAME
alter_specification:
[DEFAULT] CHARACTER SET [=] charset_name
| [DEFAULT] COLLATE [=] collation_name
ALTER DATABASE
を使用すると、データベースの全体的な特性を変更できます。これらの特性は、データベースディレクトリ内の db.opt
ファイルに格納されます。ALTER DATABASE
を使用するには、そのデータベースに対する ALTER
権限が必要です。ALTER SCHEMA
は ALTER DATABASE
のシノニムです。
最初の構文からはデータベース名を省略できます。その場合、このステートメントはデフォルトデータベースに適用されます。
各国語に関する特性
CHARACTER SET
句は、デフォルトのデータベース文字セットを変更します。COLLATE
句は、デフォルトのデータベース照合順序を変更します。セクション10.1「文字セットのサポート」では、文字セットと照合順序名について説明しています。
どのような文字セットと照合順序を使用できるかは、それぞれ SHOW CHARACTER SET
および SHOW COLLATION
ステートメントを使用して確認できます。詳細は、セクション13.7.5.4「SHOW CHARACTER SET 構文」およびセクション13.7.5.5「SHOW COLLATION 構文」を参照してください。
データベースのデフォルトの文字セットまたは照合順序を変更する場合、データベースのデフォルトを使用するストアドルーチンを削除して、新しいデフォルトを使用するように再作成する必要があります。(ストアドルーチンでは、文字セットまたは照合順序が明示的に指定されていない場合、文字データ型を伴う変数は、データベースのデフォルトを使用します。セクション13.1.15「CREATE PROCEDURE および CREATE FUNCTION 構文」を参照してください。)
MySQL 5.1 より古いバージョンからのアップグレード
UPGRADE DATA DIRECTORY NAME
句を含む構文は、データベースに関連付けられたディレクトリの名前を、データベース名をデータベースディレクトリ名にマップするための MySQL 5.1 で実装されたエンコーディングを使用するように更新します (セクション9.2.3「識別子とファイル名のマッピング」を参照してください)。この句は、次の条件の下で使用されることを目的にしています。
MySQL を古いバージョンから 5.1 以降にアップグレードすることを目的にしている。
データベースディレクトリ名にエンコーディングが必要な特殊文字が含まれている場合は、その名前を現在のエンコーディング形式に更新することを目的にしている。
このステートメントが (mysql_upgrade から呼び出された) mysqlcheck によって使用されている。
たとえば、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;
このステートメントを実行したあとは、特殊な #mysql50#
プリフィクスなしで、そのデータベースを a-b-c
として参照できます。