文字コードの設定関係なしに、MySQLのCLIに日本語を貼り付けても入力できないことがあります。AmazonLinuxのMySQL56がそうでした。
理由は上記のブログにも書いてあるとおり、ReadlineではなくLibEditをLinkしているからなのですが、実はLibEditは2016年にマルチバイトに対応しています。
2016-06-18 Jess Thrysoee
version-info: 0:54:0
all: sync with upstream source
deprecate option –enable-widec.
Upstream now always build with unicode (wide-char/UTF-8) support.
ではなぜ入力できないのか、それはAmazonLinuxに入っているlibeditが古いからです。2008年のものです。とても古いです😱
$ sudo yum list | grep libedit |
$ mysql --version |
対応はいくつかあります。
- MySQL55を使う
- MySQL56を使いつつ、LibEditは新しいものを使う
MySQL55を使う
MySQL5.6.12からReadlineではなくなっています。そのため、MySQL55のクライアントを使えば日本語は入力できます。
$ sudo yum install mysql55 |
新しいLibEditを使う
そうは言ってもMySQL5.6や5.7のクライアントを使いたい。
幸いにもstatic linkではないので、新しいLibEditをインストールしてそちらを参照するようにしてみます。
$ sudo yum install mysql56 |
ビルドしてインストール
wget http://thrysoee.dk/editline/libedit-20180525-3.1.tar.gz |
何も指定しないでconfigureすると/usr/local/libに入ってしまうので、一応/usr/local/lib64に入れるようにします。
$ ll /usr/local/lib64/ |
差し替え方法 その1
ldconfigの設定を変更する。
ただし、この方法は全てに波及してしまうので気をつける必要があります。
cat <<EOS | sudo tee /etc/ld.so.conf.d/libedit.conf |
問題なく日本語入力できました。
差し替え方法 その2
全体を差し替えてしまうのは怖いので、mysqlのCLIだけ差し替える場合はLD_LIBRARY_PATHで対応します。
alias mysql="LD_LIBRARY_PATH=/usr/local/lib64:$LD_LIBRARY_PATH /usr/bin/mysql" |
ldd /usr/bin/mysql | grep edit |
これでも問題なく日本語が入力できました。