editlineマルチバイト不具合の修正
MySQL 5.0.60で--with-libeditでビルドした場合のmysqlクライアントにおけるマルチバイト文字入力不具合が解消されたようです。
このChangeSetが取り込まれている模様。
editlineをMySQLの開発者(Bar氏)が独自修正するという方法によって対処となったわけですね。Good Job!!
背景を少し説明しておくと、、、
この"--with-libedit"というのはMySQLをソースからビルドする際に指定するconfigureオプションのひとつで、BSDライセンスであるため商用版MySQLのビルドには欠かせないものでした。商用版ではライセンス的にGPLであるGNU readlineは使えないので、唯一の選択肢であるeditlineがマルチバイト文字未対応というのはある種致命的でした。
よくメーリングリストとかでも混乱している人がいるのでさらに補足しておくと、configureオプションとしてはこんな感じになっています。MySQLはGNU readlineとeditlineを同梱してます。
configureオプション | --with-readline | --without-readline | readlineについて未定義 |
--with-libedit | configureエラー | 同梱のlibeditが使われる | 同梱のlibeditが使われる |
--without-libedit | 同梱のGNU readlineが使われる | システムのGNU readlineまたはm4テストの結果判明した外部のlinedit | システムのGNU readlineまたはm4テストの結果判明した外部のlinedit |
libeditについて未定義 | 同梱のGNU readlineが使われる | システムのGNU readlineまたはm4テストの結果判明した外部のlinedit | 同梱のlibeditが使われる |
configure.in読めという話なのですが(configure.inに書いてある)、意外と知られていないのでここでついでに周知したい。
- Communityバイナリ配布版は --with-readline でビルドされてる
- Enterprise GPLバイナリ配布版も --with-readline でビルドされている
- Enterprise 商用バイナリ配布版は --with-libedit でビルドされている
ソースからビルドする人は商用版にしたい人以外は全員"--with-readline"を指定しておくのがお勧め。この間も"--without-readline"指定してconfigure通らないとMLで言っていた人がいたけど間違わないように。
mysql-5.0.60同等以上のcommunity版がでたらなんでもOK。
GNU readlineとeditlineのマルチバイト文字以外の機能的違いはうちは知らないので知ってる人いたら補足下さい。
話がそれましたが、直ってよかったです。my_init.cのsetlocale呼び出し削除といい、ここ最近さらにMySQLは日本語周りが改善されていってますね。