default-character-setとcharacter-set-server

● /etc/my.cnf の設定

MySQL は空気(実行時のオプション)が読めないようなので、設定ファイルではっきりと明示しておくしかなさそうだ。
/etc/my.cnf

[mysqld]
default-character-set=utf8
skip-character-set-client-handshake

1行目でデフォルトの文字コードを指定し、2行目は「余計なことはするな」という命令。(MySQL4.1.5で実装)。これによってサーバとクライアントの文字コードが違っていても内部変換をしなくなる。余計なものを実装して、その余計なものを抑止するオプションを実装してくれたMySQLに乾杯!設定は上記のように "mysqld" セクションだけでOK。サーバの設定を変更したので、MySQLは忘れずに再起動しておく。

自分は mysql Ver 14.12 Distrib 5.0.24a で character-set-serverでキャラクタセットを指定していた。どっちが正しいのかmysqlのリファレンスを見たが解は見つからず。ただver5以降のリファレンスではキャラクタセットの指定の説明にはcharacter-set-serverがよく使われていた。むむむ。

ただし、「skip-character-set-client-handshake」は「character_set_server」の値を参照するので注意。

「character-set-server」「default-character-set」とキャラクタセットを2つ設定しているのをみるが、両方書いてもどちらか一方でも動作はかわらず。
「default-character-set」でサーバのキャラクタセットがすべて初期化されるけど、その対象が「character-set-server」という話ぽい。

なんて記述があった。むむむ・・・。

default-character-set = sjis
character-set-server = ujis
skip-character-set-client-handshake

なんて記述をmy.cnfに記述してstatusやvariablesを見る。キャラクタ関係はujisになってた。次は

character-set-server = ujis
default-character-set = sjis
skip-character-set-client-handshake

上下逆。今度はキャラクタ関係がsjisに。

character-set-server、default-character-setの動作の違いは分からず。でも両方あった時に後の設定が有効になると分かった。今日はこれでいいや。