MySQL 文字コード


● cs_connection の値に注意する

SET CHARACTER SET charset_name すると、cs_connection は charset_nameではなく cs_database の値になる。また、cs_database の値はカレントデータベースの文字コード (DATADIR/DBNAME/db.optがあればそれに、なければcs_serverの値) になる。

なので、例えば mysql で接続して latin1 なデータベースに use dbname で移動 (この時点で cs_database が latin1 になる) した後に SET CHARACTERSET ujis を実行すると、 cs_client は ujis になるが cs_connection が(cs_databaseと同じ) latin1 になってしまうので、日本語の INSERT などが期待通りにならない。

なるほどなぁ、DBNAME/db.optを各言語の文字集合とかunicodeとかに書き換えて create script 走らせ直すのがいちばん手っ取り早い……のかな。