[MySQLウォッチ]第36回 文字化けのメカニズム文字コードの多様化とインターネットやクライアント-サーバーなどの分散環境の普及によって,文字化けトラブルの頻度が飛躍的に拡大した。特に Webシステムでは,WebブラウザとWebサーバー,プログラム(スクリプト)言語,そしてデータベースと文字化けが発生する要因が数多く存在する。 Webサーバー側の文字化けは,他のコラムにお任せすることとして,今回はMySQLの文字化けに関して解説する。
文字化けの仕組み文字化けは開発者にとって悩みの種である。しかし,文字化けの仕組みを少しでも知っていれば,意外と簡単に解決できるものだ。このコラムで,ぜひその知識を学んでほしい。
MySQL 4.1の変更点さて,MySQLにおいては,バージョン4.1のリリースを境に文字化けが起きることが非常に多くなった。では,バージョン4.1は,それ以前のバージョンと何が変わったのだろうか。そこに文字化けを解決するヒントがある。 表1●MySQL4.1の主な変更点
上記の中で,文字コードに関係する項目が3つある。これらを順番に解説する。
文字コードの増加(Unicodeのサポート)MySQL 4.0では,2種類の日本語文字コードしかサポートしていなかった。しかし,MySQL 4.1からUnicodeが追加され,大きく分類すると3種類の文字コードが使用可能になった。 表2●MySQLのサポートする日本語文字コード
つまり,MySQL4.0では,2種類の文字コードしかないので,文字化けが発生すれば,もう一方の文字コードで試せばよかった。しかし,MySQL5.0では,6種類の文字コードがあるため,文字化けが発生する機会が増えてしまった。
文字コードの定義MySQL 4.0では,サーバー全体で文字コードの定義を行った。しかし,MySQL 4.1では,カラム(フィールド),テーブル,データベース毎に文字コードを設定可能になった。 その関連として,カラムの定義で文字列型に設定する場合,char(X)にて指定する数値がバイト数ではなく文字数に変更されたのだ。そのため,char(10)は,文字コードによって10バイト,20バイト,30バイトと物理的なバイト数が異なるようになった。
|