Chat (Lingr.com)
Informaiton
Daily
Column
- MySQL日本語の旅(5/1)
- アクセス向上秘伝(5/9)
- 一風変ったHaskellλ門(6/13)
- SICP Answer Book (5/31) 問題3.26追加
Zope Solution
Extra
アーカイブ
OSS案内所
Site Info
関連リンク
データベース名に特殊文字である日本語を使用したとき、 バッククォート(`)で囲まなければならない。
今回は、これについて調べてみよう。
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>
エラーメッセージの中の漢字が変になっているが、 指定したデータベース名の `元帳` が既に存在するので作れなかった。
キャラクタセットとは関係なく、`元帳`という日本語文字列を 正しく認識してくれているようだ。やれやれ、一件落着。
データベース名に漢字を使う場合には、 バッククォートで必ず囲まなければならない。
ということで、データベース名に漢字を安心して使っても良い。
と判断して大丈夫なんだろうか。一抹の不安がするのだが。
フィードバック:
There is no comment.