Open Source WEB

前回の テーブルの縦線が揃わない では、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クライアントコマンドは、 そこまでキャラクタセットを頻繁に変更するのを考慮していないようだ。

そういう点では、この連載はちょっとやり過ぎているかな。

いやいや、いろいろ限界に挑んでいくことで、 何事もより深く理解できるというものだ。


戻る:テーブルの縦線が揃わない

次へ:CONCAT()で文字列をつなぐ


フィードバック:

Name:
Comment:

There is no comment.

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

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