Open Source WEB

前回の最後に、作成できたデータベース「元帳」を SHOW CREATE DATABASE で調べた。

mysql> SHOW CREATE DATABASE 元帳\G
*************************** 1. row ***************************
       Database: 元帳
Create Database: CREATE DATABASE `元帳` /*!40100 DEFAULT CHARACTER SET latin1 */
1 row in set (0.00 sec)
 
mysql>

前回とは表示の形式を変更した。

この「元帳」データベースを作成するために入力したSQLは、

mysql> CREATE DATABASE 元帳;
Query OK, 1 row affected (0.00 sec)

であった。 SHOW CREATE DATABASE の表示結果をよーく見ると、ちょっとだけ違う。

元帳の両側にクォートがあるようだ。

一度削除してから、クォートで囲った元帳で作りなおしてみよう。

mysql> DROP database 元帳;
Query OK, 0 rows affected (0.04 sec)
 
mysql> CREATE DATABASE '元帳';
ERROR 1064 (42000): You have an error in your SQL syntax; 
check the manual that corresponds to your MySQL server version 
for the right syntax to use near ''元帳'' at line 1
mysql>

ダメだった。

今は、直接入力してしまったので、今度は SHOW CREATE DATABASE の 出力をコピー&ペーストすることで作ってみよう。

mysql> CREATE DATABASE `元帳`;
Query OK, 1 row affected (0.00 sec)
 
mysql> SHOW DATABASES;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| test               |
| 元帳               |
+--------------------+
4 rows in set (0.00 sec)
 
mysql>

今度はできちゃった。

さて、何が違うのだろうか。 ちゃんと調べるためには、16進数で表示するに限る。 SHOW CREATE TABLE で表示された「`元帳`」を クォートを含めてHEX()に入れてみよう。

mysql> SELECT HEX(`元帳`);
ERROR 1054 (42S22): Unknown column '元帳' in 'field list'
mysql>

エラーになってしまった。「`」はどうやら普通のクォートではないらしい。

では、これを更に、「"」で囲ってみよう。

mysql> SELECT HEX("`元帳`");
+------------------+
| HEX("`元帳`")    |
+------------------+
| 60E58583E5B8B360 |
+------------------+
1 row in set (0.06 sec)
 
mysql>

今度はうまくいった。 最初と最後が 60 なので、これは バッククォート、逆ダッシュである。 英語では、 backtick(バックティック)と言うらしい。

ということで、今回は、

データベース名は、backtick ( ` ) で囲むべきなのだろうか?

ということが予測できた。(やれやれ)


戻る:utf8では漢字のデータベース名はもっと変になる

次へ:マニュアルでバッククォート(`)について調べよう


フィードバック:

Name:
Comment:
Kelley Hogan: (Fri May 1 18:22:18 2009 )
1py67q6xpa3jpqwm

の出力中の

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

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