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
関連リンク
マニュアル確認
まず、マニュアルで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がちゃんと消えていた。
ということで、こういう風にしてもデータベースを作ることができます。
でも、こんな方法で作ったりすると危険なので、 やらない方が良いと思いますが、トラブル時には役に立ったりする雑学かも。
ということで、データベースの正体はハッキリした。
もう日本語のデータベース名も大丈夫、だろうか???
フィードバック:
There is no comment.