MySQL - 日本語対応について


MySQL の日本語化は私が行ないました。当初は日本語EUCにのみ対応し たものをパッチの形式で作成していましたが、少し汎用的にして Shift JIS も扱えるように変更を加え、その後 MySQL-3.21.30 に本家 のソースに組み込まれました。

本家のソースに組み込まれたからと安心していたら、時々日本語が扱え ないバージョンがリリースされたりします。どうやら英語(とスウェー デン語?)以外の言語はテストされてないようです (^^;


設定

MySQL の各国語対応はバイナリ作成時の configure コマンドの --with-charset オプションの指定で行います。つまり、作 成されたバイナリは一つの言語しか扱うことはできません。起動時オプショ ンや環境変数などで動的に変更することはできません。ただし 3.23.14 以降では configure の --with-extra-charset オプションによって、複 数言語を扱えるバイナリを作成することができるようになりました。

MySQL が対応している日本語文字コードは、日本語EUC(ujis)またはシフ トJIS(sjis)の二つです。どちらかを選択し configure 時に指定してくだ さい。例えば日本語EUCの場合は --with-charset=ujis と 指定します。


何をしてるのか

MySQL はもともと8bitの文字を扱うことができます。しかし複数バイトで 1文字を構成するような文字コードでは次のような問題が発生しました。

これらの問題を解決するため、charset として ujis または sjis を指定 した場合は、文字判定を行う部分が、常に複数バイトを意識するようにな ります。

また、おまけで、データベース名やテーブル、項目名などにも日本語が使 えるようにしてあります。

なお、BINARY 属性のついた文字列や BLOB 項目では、複数バイト処理は 行われません。これらの項目には文字が格納されるとは限らないからです。

これらは日本語だけじゃなくて、マルチバイトの文字体系での共通の問題 です。そのため、ujis や sjis に依存しないマルチバイト処理共通の機 構を作り、ujis, sjis 処理はその上に実装されています。

文字セットの処理は 3.23.14 で大きく変わりました。configure 時では なく、mysqld 実行時に文字セットを指定できるようになりました。マル チバイト文字の処理についても、すでに私の手を離れています。


対応していないこと

正規表現演算子 REGEXP はオリジナルのままです。これは単に私の力不足 です。そのうち誰かがやってくれるかもしれません。

項目長の制限以上の文字列を登録した場合、それが1文字の途中であって も容赦なくぶった切られます。例えば、char(5) 項目に "あいう" を登録すると "あい"+A4("う"の1バイト目)が格納されます。


tommy@tmtm.org
Last modified: Sat Sep 15 02:28:21 JST 2001