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コマンドの起動は、 以下のようにした。
shell$ mysql -u root
つまり、最低限のオプション指定だけだったのだが、今度はオプションを 付けてみよう。
mysql 起動時にデフォルトのキャラクタセットを指定する
今までは、mysqlを起動して、SET NAMES でキャラクタセットを指定し、 それに合わせて文字端末の文字コードも変えていた。
ここでは、mysql起動時に
--default_character_set=キャラクタセット
を付けて動かしてみよう。
以下は、 eucjpms を指定して起動した場合である。
shell$ mysql -u root --default_character_set=eucjpms Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 2 to server version: 5.0.7-beta-standard Type 'help;' or '\h' for help. Type '\c' to clear the buffer. mysql> SET NAMES eucjpms; Query OK, 0 rows affected (0.07 sec) mysql> USE test; Reading table information for completion of table and column names You can turn off this feature to get a quicker startup with -A Database changed mysql> SELECT * FROM town; +---------+------------+----------------------------+ | post | name | yomi | +---------+------------+----------------------------+ | 1620824 | 揚場町 | アゲバチョウ | | 1620848 | 市谷鷹匠町 | イチガヤタカジョウマチ | | 1620802 | 改代町 | カイタイチョウ | | 1600002 | 坂町 | サカマチ | +---------+------------+----------------------------+ 4 rows in set (0.05 sec)
何と、EUC-JP(eucjpms)でも、縦線が揃った状態で表示できてしまった。 文字端末の文字コードに合わせたキャラクタセットを、 mysqlコマンドのデフォルトキャラクタセットとして指定すると、 どうも問題ないようだ。
UTF-8での表示はどうなるか
とりあえず、mysqlを抜けずに、文字端末の文字コードを変更し、 mysqlのキャラクタセットを変更した場合について調べてみよう。
mysql> SET NAMES utf8; Query OK, 0 rows affected (0.00 sec) mysql> SELECT * FROM town; +---------+-----------------+-----------------------------------------+ | post | name | yomi | +---------+-----------------+-----------------------------------------+ | 1620824 | 揚場町 | アゲバチョウ | | 1620848 | 市谷鷹匠町| イチガヤタカジョウマチ| | 1620802 | 改代町 | カイタイチョウ | | 1600002 | 坂町 | サカマチ | +---------+-----------------+-----------------------------------------+ 4 rows in set (0.00 sec)
やはり、駄目である。
起動時に、デフォルトキャラクタセットにutf8を指定して 起動するとどうなるであろうか。
shell$ mysql -u root --default_character_set=utf8 Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 3 to server version: 5.0.7-beta-standard Type 'help;' or '\h' for help. Type '\c' to clear the buffer. mysql> SET NAMES utf8; Query OK, 0 rows affected (0.00 sec) mysql> USE test; Reading table information for completion of table and column names You can turn off this feature to get a quicker startup with -A Database changed mysql> SELECT * FROM town; +---------+-----------------+-----------------------------------------+ | post | name | yomi | +---------+-----------------+-----------------------------------------+ | 1620824 | 揚場町 | アゲバチョウ | | 1620848 | 市谷鷹匠町 | イチガヤタカジョウマチ | | 1620802 | 改代町 | カイタイチョウ | | 1600002 | 坂町 | サカマチ | +---------+-----------------+-----------------------------------------+ 4 rows in set (0.00 sec)
カラム幅が、必要以上に広くなってしまうことを除けば、 縦線はちゃんと揃うようになった。
mysql は、起動後キャラクタセットを変更しても無効らしい
以上のことから、mysqlは、文字幅をまったく考えていないのではなくて、 文字幅を考えるとき、起動時のキャラクタセットの文字幅として評価しながら 動いているのではないかと思う。
SET NAMES とかで、端末側のキャラクタセットが変更された場合、 もちろん端末側のキャラクタセットに合わせて文字の変換は行なっている。 もしそうでなかったら、文字が化けてしまうので、 そこが動作していることは間違いない。
しかし、文字幅に関してまでは、動的に処理されていないように思われる。 まあ、そこまで必要かというと、無くてもいいかという気がする。
mysqlクライアントで使用するキャラクタセットは、以下で指定すべき
- 起動オプション
- my.cnf
- ~/.my.cnf
途中での変更は無効
この「MySQL日本語の旅」では、説明のため、途中でキャラクタセットを 頻繁に変更しながら説明してきたが、mysqlクライアントコマンドは、 そこまでキャラクタセットを頻繁に変更するのを考慮していないようだ。
そういう点では、この連載はちょっとやり過ぎているかな。
いやいや、いろいろ限界に挑んでいくことで、 何事もより深く理解できるというものだ。
戻る:テーブルの縦線が揃わない
フィードバック:
There is no comment.