MariaDB / データベース名でハイフンやドットを使用する方法
MariaDBでは、名前にハイフン(-)やドット(.)を含むデータベースを作成する場合、名前全体をバッククォートで囲みます(`)。例えば、CREATE DATABASE `test-test`;やCREATE DATABASE `test.test`;のように書きます。
なぜバッククォートが必要なのですか?
データベース名は、MariaDB がオブジェクトを識別するために使用する識別子です。バックティックなしでは、MariaDB は test-test のハイフンを名前の一部として解釈せず、test.test のドットは識別子間のセパレーターとして解釈される場合があります。したがって、以下のいずれの文も意図したデータベースを作成するための有効な構文ではありません。
CREATE DATABASE test-test;
CREATE DATABASE test.test;
各文を実行すると構文エラーが発生します。エラーメッセージの詳細は、サーバーのバージョンやクライアントによって異なる場合があります。バックティックは、文字列を表すために使用されるシングルクォート(')とは異なります。MariaDB の識別子のルールについては、MariaDB Identifier Names Document を参照してください。
データベースの作成と確認
以下の例は、MariaDBサーバーに接続されたSQLクライアント上で実行されます。新しいデータベースを作成するには権限が必要であり、同じ名前のデータベースが既に存在する場合は、作成前にその使用状況を確認する必要があります。練習は既存データのない別のテスト環境で行うべきです。
CREATE DATABASE `test-test`;
CREATE DATABASE `test.test`;
SHOW DATABASES;
作成が成功した場合、一覧に名前が表示されます。名前が既に存在する場合や権限が不十分な場合、作成に失敗することがあります。英字、数字、アンダースコアを使えるなら、test_testのような名前にすると、引用符やツールの互換性に関する混乱を減らせます。
ドットを使用した名前の利用
データベースを選択する際は、ドットを含む名前全体をバッククォートで囲みます。次のステートメントを実行すると、現在のデータベース名が test.test と表示されます。
USE `test.test`;
SELECT DATABASE();
データベースとテーブルを一緒に指定する場合は、それぞれを個別に囲み、間にドットを置きます。下の例では、最初のドットはデータベース名の一部であり、バッククォートの外側のドットはデータベースとテーブルを区切るためのものです。
CREATE TABLE `test.test`.`example` (id INT);
INSERT INTO `test.test`.`example` VALUES (1);
SELECT id FROM `test.test`.`example`;
空の練習用データベースで実行すると、最終的なクエリは 1 を返します。テーブル作成およびデータ挿入の権限も必要です。対照的に、すべてを `test.test.example` のように単一のペアで囲むと、それはドットを含む単一の識別子を表し、2つの異なる識別子ではありません。
操作中に確認すべきポイント
バッククォートで囲めるからといって、すべてのツールが特殊文字を含む名前を同じ方法で扱うわけではありません。アプリケーションの接続設定、バックアップおよびリストアツール、管理ツール、サーバーのバージョンがこれらの名前をサポートしているかどうかを個別に確認してください。例えば、MariaDB のカタログ機能では、使用するクライアントによってドットを含むデータベース名に制限があります。詳細な条件については、 MariaDB カタログドキュメント を参照してください。
データベース名の大文字小文字の区別は、オペレーティングシステムのファイルシステムおよびlower_case_table_namesの設定によって影響を受けます。既存の名前が異なる大文字小文字を使用していると仮定せず、実際の名前を確認してください。この設定はサーバーの初期化に関連しているため、既存の本番サーバーでトラブルシューティング目的で任意に変更しないでください。
練習が終わったら、データベースを削除する前に名前と内容をまず確認してください。DROP DATABASEはその中のテーブルとデータを削除するため、実際のサービスデータベースで例示の削除コマンドを実行しないでください。以下のコマンドは、テスト目的で作成した空の環境でのみ使用してください。
DROP DATABASE `test-test`;
DROP DATABASE `test.test`;
例は、Windows上の独立したMariaDB 12.3.3で、バッククォートの有無による作成、データベースの選択、テーブルクエリにおいて確認されました。他のバージョンや管理ツールでは、その環境の挙動や権限を確認してください。




