Open Source WEB

データベース名に特殊文字である日本語を使用したとき、 バッククォート(`)で囲まなければならない。

今回は、これについて調べてみよう。


utf8のとき、バッククォートで囲めば大丈夫か?

utf8では漢字のデータベース名はもっと変になるで駄目になった例を 試してみる。

mysql> drop database  `ユニコード`;
Query OK, 0 rows affected (0.01 sec)
 
mysql> SET NAMES utf8;
Query OK, 0 rows affected (0.00 sec)
 
mysql> CREATE DATABASE `名古屋`;
Query OK, 1 row affected (0.00 sec)
 
mysql> CREATE DATABASE `横浜`;
Query OK, 1 row affected (0.04 sec)
 
mysql> CREATE DATABASE `あいうえお`;
Query OK, 1 row affected (0.00 sec)
 
mysql> SHOW DATABASES;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| test               |
| あいうえお         |
| 名古屋             |
| 横浜               |
+--------------------+
6 rows in set (0.01 sec)
 
mysql>

とうことで、バッククォートで囲むと、問題無くデータベースが作成 されるようだ。

CREATE DATABASE では、同名のデータベースが存在しない場合にだけ データベースを作成することができる。

さらに、データベースのデフォルトキャラクタセットも指定可能である。 これは重要なことなんだが、テーブルを実際に作ってみないと効果がわからないので、 ここでは説明を割愛する。

さて、以上を全部まとめてやってしまおう。

mysql> CREATE DATABASE IF NOT EXISTS `ユニコード` CHARACTER SET utf8;
Query OK, 1 row affected (0.00 sec)
 
mysql> SHOW CREATE DATABASE `ユニコード`\G
*************************** 1. row ***************************
       Database: ユニコード
Create Database: CREATE DATABASE `ユニコード` /*!40100 DEFAULT CHARACTER SET utf8 */
1 row in set (0.00 sec)
 
mysql>

ちゃんと動作しているようだ。

しかし、SHOW CREATE DATABASE では、デフォルトキャラクタセットは コメント中に反映されるが、これってちょっと変であるが、 そういうものだと納得することにしよう。


cp932のとき、バッククォートで囲めば大丈夫か?

cp932だと漢字のデータベース名が変になる?でも、色々ダメな場合があったので、 ここでそれらを再び試すことにしよう。

mysql> SET NAMES cp932;
Query OK, 0 rows affected (0.04 sec)
 
mysql> CREATE DATABASE `最後の字`;
Query OK, 1 row affected (0.04 sec)
 
mysql> CREATE DATABASE `字`;
Query OK, 1 row affected (0.00 sec)
 
mysql> CREATE DATABASE `z`;
Query OK, 1 row affected (0.00 sec)
 
mysql> CREATE DATABASE `元帳`;
Query OK, 1 row affected (0.00 sec)
 
mysql> SHOW DATABASES;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| test               |
| 元帳               |
| 字                 |
| 最後の字           |
| z                 |
+--------------------+
7 rows in set (0.04 sec)
 
mysql>

cp932の場合でも、バッククォートで囲めば大丈夫だ。


eucjpmsのとき、バッククォートで囲めば大丈夫か?

どうせ同じようになり、ちゃんと動くであろうから、もうくり返さない。

でも、以下のようなテストをした。

cp932で作ったデータベースを削除しない状態で、 同じ名前のデータベースを eucjpmsにて作ってみた。

mysql> SET NAMES eucjpms;
Query OK, 0 rows affected (0.02 sec)
 
mysql> CREATE DATABASE `元帳`;
ERROR 1007 (HY000): Can't create database '?…ƒ絽?'; database exists
mysql>

エラーメッセージの中の漢字が変になっているが、 指定したデータベース名の `元帳` が既に存在するので作れなかった。

キャラクタセットとは関係なく、`元帳`という日本語文字列を 正しく認識してくれているようだ。やれやれ、一件落着。


データベース名に漢字を使う場合には、 バッククォートで必ず囲まなければならない。

ということで、データベース名に漢字を安心して使っても良い。

と判断して大丈夫なんだろうか。一抹の不安がするのだが。


戻る:データベース名はバッククォート(`)で囲むのが正式

次へ:データベースはディレクトリで実現されている


フィードバック:

Name:
Comment:

There is no comment.

このサイトは、 IPA の「平成15年度オープンソフトウエア活用基盤整備事業」 の委託事業として開発されたKahuaで試験的に運用しております。

Copyright (c) 2004-2007 株式会社タイムインターメディア About Us