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は日本語周りが改善されていってますね。