Open Source WEB

マニュアル確認

まず、マニュアルでCREATE DATABASE を確認しておこう。

13.1.3. CREATE DATABASE

この中に、以下の一節がある。

Databases in MySQL are implemented as directories containing files that
correspond to tables in the database. Because there are no tables in 
a database when it is initially created, the CREATE DATABASE statement 
only creates a directory under the MySQL data directory (and the db.opt 
file, for MySQL 4.1.1 and up).

つまり

MySQLのデータベースというのは、ディレクトリなのだ。


データベースは、実際にはどこに格納されるのであろうか。

MySQLでは、datadir という変数があって、 この変数がデータベースディレクトリ名を保持している。

mysql> SHOW VARIABLES LIKE 'datadir';
+---------------+-----------------------+
| Variable_name | Value                 |
+---------------+-----------------------+
| datadir       | /usr/local/mysql/var/ |
+---------------+-----------------------+
1 row in set (0.00 sec)
 
mysql>

早い話が、このディレクトリの下に、実際のデータベースが入るようである。

実際にデータベースを作って調べてみよう。 とりあえず、`AREKORE` という名前で作る。

mysql> CREATE DATABASE `AREKORE`;
Query OK, 1 row affected (0.00 sec)
 
mysql>

さて、別のターミナルを立ち上げて、データベースディレクトリを調べてみよう。

shell# cd /usr/local/mysql/var
shell# ls
  色々と出てくるのであるが、
  この中に ちゃんと AREKORE というディレクトリができている
  詳細は内緒

shell# cd AREKORE
shell# ls
db.opt
shell# cat db.opt
default-character-set=latin1
default-collation=latin1_swedish_ci
shell#

CREATE DATABASE を実行すると、指定したデータベース名のディレクトリが データベースディレクトリの直下にできている。 そして、db.opt というファイルの中に このデータベースのデフォルトのキャラクタセットと デフォルトのコレーションが書かれている。 ここでは、CREATE DATABASEでデフォルトのキャラクタセットを指定しなかったので、 latin1とlatin1_swedish_ciになった。

swedishという言葉が入っているのを不思議に思うかもしれないが、 MySQLを作っている会社 MySQL AB は北欧スエーデンの会社であることが こんなところからもわかる。標準語はスエーデン語なのかなぁ。

デフォルトキャラクタセットを指定してデータベースを作ってみよう。

mysql> CREATE DATABASE `HATENA` CHARACTER SET eucjpms;
Query OK, 1 row affected (0.00 sec)
 
mysql>

そして、直接ディレクトリの中を見てみよう。

shell# cd ../HATENA
shell# ls
db.opt
shell# cat db.opt
default-character-set=eucjpms
default-collation=eucjpms_japanese_ci
shell#

db.optは、ちゃんと指定したものに変っている。 db.optという名前なんだから、これはデータベースのオプションファイル という意味であろう。


ディレクトリを作ればデータベースになるか?

データベースの実体はディレクトリということが判明したので、 今度は、shellから直接勝手なディレクトリを作ったとき、 それがデータベースとして認識されるかどうか試してみよう。

shell# cd /usr/local/mysql
shell# mkdir mydb
shell# chown mysql:mysql mydb
shell# chmod 700 mydb
shell#

という手順で、MySQLサーバのデータディレクトリの下に、 mydbというディレクトリを作り、適当に調整してみた。

そして、mysqlクライアントからどう見えるか確認してみた。

mysql> SHOW DATABASES;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mydb               |
| mysql              |
| test               |
+--------------------+
4 rows in set (0.00 sec)
 
mysql>

mydb がちゃんと含まれている。 正しく誤魔化せた(?)みたいである。

もうちょっと調べるために、SHOW CREATE DATABASE もやってみた。

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

db.optは作っていないので、デフォルトキャラクタセットは latin1 になった。

さらに、mysqlクライアントコマンドから削除してみよう。

mysql> DROP DATABASE `mydb`;
Query OK, 0 rows affected (0.00 sec)
 
mysql>

すると、データベースディレクトリ /usr/local/mysql/var から mydbがちゃんと消えていた。

ということで、こういう風にしてもデータベースを作ることができます。

でも、こんな方法で作ったりすると危険なので、 やらない方が良いと思いますが、トラブル時には役に立ったりする雑学かも。


ということで、データベースの正体はハッキリした。

もう日本語のデータベース名も大丈夫、だろうか???


戻る:色々なキャラクタセットのデータベース名を試してみよう

次へ:データベース名に漢字が使えるみたい


フィードバック:

Name:
Comment:

There is no comment.

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

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