【コラム】
先々週から茶筌を使った形態素解析について書いてきたが、最近MySQL周辺でバージョン4.1のプロダクション・リリースに伴ったちょっとした混乱が生じている様子なので、今回は少し寄り道をして情報を整理しておきたい。
MySQL 4.1では、特に我々日本人にとって影響の大きい文字エンコーディング周りにも、かなり大幅な改変が入っている。文字コードの自動変換機能が追加されたり、UTF-8、UCS2といったUnicodeのキャラクタセットが利用可能になったり、データベース単位にしか指定できなかったキャラクタセットが列単位に指定できるようになったりと、とにかく盛りだくさんである。機能が増えるのは一般的には喜ばしいことだが、既存のMySQL 4.0からアップグレードしようとするユーザにとっては、当然のことながら互換性が心配のタネになる。そして、現状ではトラブルがないとは言えない状況のようだ。
まず、サーバが4.1にアップグレードされた場合、4.0以前のクライアントから接続しようとすると、以下のようなメッセージが表示されて接続を拒否される。
これは、パスワードのハッシュが、セキュリティを高めるために16バイト長から41バイト長に変更されたためだ。接続する全てのクライアントを4.1にアップグレードすれば問題は解決するが、それが難しい場合は、暫定的に16バイト長のパスワードハッシュで運用を継続することになる。サーバを「--old-passwords」オプション付きで起動することで、PASSWORD()関数によって生成されるパスワードは16バイト長のままになるので、my.cnf設定ファイルに以下の設定を記述しておくとよいだろう。
また、4.0のデータベースを4.1に移行する場合、ユーザ情報を管理するテーブルのパスワード列の長さを変更しておく必要がある。MySQL 4.1には、この作業のための「mysql_fix_privilege_tables」スクリプトが付属するので、これを実行すればOKだ。
また、4.0までは正しく返されていた文字が「?」になってしまったり、クエリの結果自体が正しくないといった問題が起きることもある。これは、「クライアントとサーバのキャラクタセットが異なる場合、自動的に変換する」という文字コード自動変換機能に起因している場合が多い。現在、MySQL ABから提供されているMySQL 4.1のバイナリは、デフォルトのキャラクタセットが「Latin1」でビルドされている。例えば「--default-character-set=ujis」のクライアントからLatin1のサーバに接続した場合、やりとりされるデータはEUCとLatin1の間で勝手に変換がかかってしまう。EUCで表現された文字は、当然Latin1の文字セットには無いので、「?」にされてしまうわけだ。また、クエリの結果が正しくないのは、char(n)型のn、つまりフィールド長の基準がバイト数から文字数に変更になったことも影響している。
対策としては、MySQL ABが配布しているバイナリを使用せず、自分で「--with-charset=binary」ビルドオプションを付加してソースコードからビルドするのがお勧めだ。LinuxではMySQLのソースツリーで
これはデフォルトのキャラクタセットをbinaryに設定することで、自動変換機能による余計なお節介を抑制するためだ。その上で、PHPなど、MySQLのクライアントとして動作するソフトウェアも、全てMySQL 4.1のクライアントライブラリを使ってリビルドする。これでサーバ側のキャラクタセットをmy.cnfに指定して起動すれば、多くの問題は避けられる。
また、既存のデータベースのアップグレード時は、各テーブルのchar()フィールドを「ALTER TABLE」で再定義する必要がある。日本MySQLユーザ会MyNAから、このための便利なシェルスクリプトが提供されているので、これを利用すると便利だろう。MyNAのサイトには他にも、PHP4に対するパッチなどありがたいリソースが用意されている。
現在、MyNAが中心となって、日本人がより普通の感覚で使えるようなバイナリを提供してくれるよう、MySQL ABへの働きかけが積極的に行われている。実際、最新のMySQL 4.1.8では、それ以前に出ていた「"(株)"など一部の文字がテーブルに格納できない」といった問題が改善されているが、これは日本のユーザからのレポートやパッチの提供などが大きく貢献している。また、今回本稿を執筆するにあたって大いに参考にさせて頂いたMyNAのFAQ>には、ここで述べた以外にも気を付けておいた方が良い事柄について解説がある。MySQL 4.1にアップグレードする前に目を通すことを強くお勧めする。
早いもので、当コラムも今回が本年最後となる。読者の皆様が素晴らしいクリスマス、そして新年を迎えられますように。
| トマトを食べれば痩せられる!? -京大ら、新発見の成分で肥満改善効果を実証 [21:00 2/10] |
| JAXA、液体シリコン中に残存する共有結合を観察 -大口径ウェハの実現に期待 [20:11 2/10] |
| NEDOなど、熱膨張が小さな樹脂複合材料ペレットの量産化に成功 [19:22 2/10] |
| 理研、一般顕微鏡を蛍光顕微鏡に強化できるアダプタを試作して性能を実証 [19:15 2/10] |
| 天の川のブラックホールが小惑星を飲み込んでいる - NASAが発表 [18:08 2/10] |
|
[観月ありさ]濃姫役で戦国時代劇初挑戦 信長役は城田優 SPドラマ「濃姫」 [05:00 2/11] エンタメ |
|
【レポート】秋葉原アイテム巡り - 『幻想水滸伝』シリーズ最新作や『GRAVITY DAZE』が発売! 冬アニメ注目のOP・EDテーマも続々リリース [05:00 2/11] ホビー |
|
激シブ!もう一度ゴルフ Ⅱ の魅力を味わってみませんか?【大阪オートメッセ2012】 [03:06 2/11] キャリア |
|
『ヘタリア』キャラソン、新シリーズが配信決定! [03:05 2/11] キャリア |
|
全国の温泉を擬人化したドラマCD、第1弾「草津」は櫻井孝宏さん! [03:05 2/11] キャリア |