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
関連リンク
今日から、動作確認に使うバージョンが上がった。
mysql> SELECT VERSION(); +---------------------+ | VERSION() | +---------------------+ | 5.0.16-standard-log | +---------------------+ 1 row in set (0.00 sec) mysql>
データベースはディレクトリに、テーブルはファイルに対応していたのであった。 テーブルのタイプに拘らずフォーマットファイルはできるが、 テーブルのタイプによってさらに色々なファイルができることがある。
さて、ビューであるが、テーブルと同レベルのものなので、 フォーマットファイルができると想像できるのだが、それを確かめてみよう。
繰り返しになるが、`漢字`というテーブルと、それから作った`ビュー`というビューを 作ってみよう。
mysql> USE test;
Database changed
mysql> SET NAMES eucjpms;
Query OK, 0 rows affected (0.00 sec)
mysql> CREATE TABLE `漢字` ( `字` char(1), `画数` int )
-> ENGINE=InnoDB DEFAULT CHARACTER SET eucjpms;
Query OK, 0 rows affected (0.05 sec)
mysql> INSERT INTO `漢字` VALUES ('鰯',21),('鯰',19),('鰹',23);
Query OK, 3 rows affected (0.00 sec)
Records: 3 Duplicates: 0 Warnings: 0
mysql> CREATE VIEW `ビュー` AS SELECT * FROM `漢字`;
Query OK, 0 rows affected (0.00 sec)
mysql>
さて、ここで例によって、MySQLのデータディレクトリに入り込んで、 中を覗いてみよう。
ファイルを覗くので、最初に環境変数LANGをutf8に変更しておこう。 そうしないと、ファイル名が化けてしまうからだ。
shell# LANG=ja_JP.utf8 shell# cd /usr/local/mysql/data/test shell# ls -l 合計 116 -rw-rw---- 1 mysql mysql 327 12月 2 20:22 ビュー.frm -rw-rw---- 1 mysql mysql 8592 12月 2 20:21 漢字.frm -rw-rw---- 1 mysql mysql 98304 12月 2 20:21 漢字.ibd shell#
フォーマットファイルが2つできているが、ビューの方は327バイトと非常に小さい。
shell# file *.frm ビュー.frm: Non-ISO extended-ASCII text 漢字.frm: data shell#
ビュー.frm は ASCII text ということなので、見てみよう。
shell# cat ビュー.frm TYPE=VIEW query=select `test`.`漢字`.`字` AS `字`,`test`.`漢字`.`画数` AS `画数` from `test`.`漢字` md5=ef5f37b68614a56cb31e8b091a4837ba updatable=1 algorithm=0 definer_user=root definer_host=localhost suid=1 with_check_option=0 revision=1 timestamp=2005-12-02 20:22:04 create-version=1 source=SELECT * FROM `????` shell#
なぜか最後の source= のところで文字化けを起こしている。 VIEWを作るときのクエリのキャラクタセットがeucjpmsだったのだが、 何故かeucjpmsのまま記録されてしまっているようだ。
ビューをutf8で作り直したらどうなるか、確認してみよう。
mysql> DROP VIEW `ビュー`;
Query OK, 0 rows affected (0.00 sec)
mysql> SET NAMES utf8;
Query OK, 0 rows affected (0.00 sec)
・・・・・・・・・ターミナルの文字コードをUTF-8に変更
mysql> CREATE VIEW `ビュー` AS SELECT * FROM `漢字`;
Query OK, 0 rows affected (0.00 sec)
mysql>
ここで、またデータディレクトリの中をのぞき込んで、`ビュー`のフォーマット ファイルを見てみよう。
shell# cat ビュー.frm TYPE=VIEW query=select `test`.`漢字`.`字` AS `字`,`test`.`漢字`.`画数` AS `画数` from `test`.`漢字` md5=ef5f37b68614a56cb31e8b091a4837ba updatable=1 algorithm=0 definer_user=root definer_host=localhost suid=1 with_check_option=0 revision=1 timestamp=2005-12-02 20:37:45 create-version=1 source=SELECT * FROM `漢字` shell#
今度は、sourceのところも、ちゃんと見えるようになった。
う〜む、本当に、VIEWを生成したときのソースの部分を、 その時のキャラクタセットのままで記憶しているようだ。 こういうところは、全部UTF-8にすることに確かなっていたのではないかと 思うのだが、どうなんだろうか。
query=の行はutf8で、source=の行はeucjpmsになったりするのはいただけない。
もし何等かの影響があるのなら、MySQLデータベースサーバを再起動したときに 発生するのではという杞憂があったので、一応確認したが問題ないようであった。 このsourceの値が記録以外の目的で使われているのかどうかは知らない。
戻る:ビューの変更
フィードバック:
There is no comment.