こんにちは。clonedです。
MySQLの対話クライアントに日本語(ASCII以外の文字)が入力できない場合、まずは文字コードの設定を確認しますが、文字コードの設定が正しくても日本語を入力できない場合があります。
mysql> SELECT * FROM foo WHERE name = '日本語';
と入力(もしくは貼り付け)しようとしても
mysql> SELECT * FROM foo WHERE name = '';
となってしまうような状態です。なお、次のように対話インタフェースを利用しなければ日本語が利用できるため、文字コード設定以外の問題が考えられます。
$ mysql -ufoo -p dbname -e "SELECT * FROM foo WHERE name = '日本語';"
原因
MySQLの文字入力ライブラリがGNU Readlineではなくlibeditになっていると、上記のような現象になります。libeditがマルチバイトに対応していないことが原因のようです。
対策
https://dev.mysql.com/doc/refman/5.6/ja/source-configuration-options.html によると、MySQL 5.6.5でReadlineがバンドルされなくなり、5.6.12に WITH_EDITLINE
が導入され bundled
か system
をコンパイル時に選択できるようです。 bundled
になっていると libedit
が利用され、日本語入力できません。
Amazon LinuxでMySQL 5.6をyum installしたところこのようになりました。コンパイルオプションを調べたところ WITH_EDITLINE
は指定されていなかったため、デフォルトの bundled
になっているのだと思います。
この記事の確認環境は Amazon Linux AMI release 2017.09
mysql Ver 14.14 Distrib 5.6.39, for Linux (x86_64) using EditLine wrapper
です