Open Source WEB

今日から、動作確認に使うバージョンが上がった。

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の値が記録以外の目的で使われているのかどうかは知らない。


戻る:ビューの変更

次へ:カラムにエイリアスをつける


フィードバック:

Name:
Comment:

There is no comment.

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

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