MariaDBシェルに特殊文字を貼り付けまたは入力できないのはなぜですか?

MariaDBシェルに特殊文字を貼り付けまたは入力できないのはなぜですか?

私のオペレーティングシステム情報:

uname -a
Linux debian 5.10.0-8-amd64 #1 SMP Debian 5.10.46-4 (2021-08-03) x86_64 GNU/Linux

地域設定:

locale 
LANG=en_HK.UTF-8
LANGUAGE=en_HK:en
LC_CTYPE="en_HK.UTF-8"
LC_NUMERIC="en_HK.UTF-8"
LC_TIME="en_HK.UTF-8"
LC_COLLATE="en_HK.UTF-8"
LC_MONETARY="en_HK.UTF-8"
LC_MESSAGES="en_HK.UTF-8"
LC_PAPER="en_HK.UTF-8"
LC_NAME="en_HK.UTF-8"
LC_ADDRESS="en_HK.UTF-8"
LC_TELEPHONE="en_HK.UTF-8"
LC_MEASUREMENT="en_HK.UTF-8"
LC_IDENTIFICATION="en_HK.UTF-8"
LC_ALL=

Webページの特殊文字をクリップボードからコピーしてåマウスパッドとシェルターミナルに貼り付けると、正常に表示されることがあります。

ここに画像の説明を入力してください。

mysqlのバージョン情報:

mysql --version
mysql  Ver 15.1 Distrib 10.5.11-MariaDB, for debian-linux-gnu (x86_64) using  EditLine wrapper

MariaDBの文字と照合順序の設定:

MariaDB [(none)]> show variables like '%char%';
+--------------------------+----------------------------+
| Variable_name            | Value                      |
+--------------------------+----------------------------+
| character_set_client     | utf8mb4                    |
| character_set_connection | utf8mb4                    |
| character_set_database   | utf8mb4                    |
| character_set_filesystem | binary                     |
| character_set_results    | utf8mb4                    |
| character_set_server     | utf8mb4                    |
| character_set_system     | utf8                       |
| character_sets_dir       | /usr/share/mysql/charsets/ |
+--------------------------+----------------------------+
8 rows in set (0.001 sec)
show variables like 'collation%';
+----------------------+--------------------+
| Variable_name        | Value              |
+----------------------+--------------------+
| collation_connection | utf8mb4_general_ci |
| collation_database   | utf8mb4_general_ci |
| collation_server     | utf8mb4_general_ci |
+----------------------+--------------------+
3 rows in set (0.001 sec)

クリップボードからsqlite3シェルに貼り付け、sqlite3シェルに特殊文字を入力できます。

ここに画像の説明を入力してください。

bashシェルでmsyql selectコマンドを実行し、特殊文字を表示できます。

debian@debian:~$ mysql -u root -D test -p -e 'select "å"  ;'
+----+
| å  |
+----+
| å  |
+----+

Mariadb シェルは特殊文字を正しく表示します。

select * from `character`;
+---------+
| special |
+---------+
| å       |
+---------+
1 row in set (0.000 sec)

MariaDBと入力すると、マウスカーソルがMariaDBシェルに入り、特殊文字をåMariaDBシェルに貼り付けることができず、åMariaDBシェルに特殊文字を入力することはできません。
Mariadb シェルに次の sql コマンドを入力できません。

select * from `character` where special="å";

MariaDBシェルがそれを入力として受け入れて正常に表示するにはどうすればよいですか?
私はMariaDBのデフォルト設定を使ってこの問題を解決しました。

sudo vim /etc/mysql/mariadb.cnf
# i delete all my customized setting.
[client]
[mysql]
[client-server]
socket = /run/mysqld/mysqld.sock
!includedir /etc/mysql/conf.d/
!includedir /etc/mysql/mariadb.conf.d/

sudo systemctl restart mysqld
mysql -u root -p
MariaDB [(none)]> show variables like '%collation%';
+----------------------+--------------------+
| Variable_name        | Value              |
+----------------------+--------------------+
| collation_connection | utf8_general_ci    |
| collation_database   | utf8mb4_general_ci |
| collation_server     | utf8mb4_general_ci |
+----------------------+--------------------+
3 rows in set (0.001 sec)

MariaDB [(none)]> show variables like '%char%';
+--------------------------+----------------------------+
| Variable_name            | Value                      |
+--------------------------+----------------------------+
| character_set_client     | utf8                       |
| character_set_connection | utf8                       |
| character_set_database   | utf8mb4                    |
| character_set_filesystem | binary                     |
| character_set_results    | utf8                       |
| character_set_server     | utf8mb4                    |
| character_set_system     | utf8                       |
| character_sets_dir       | /usr/share/mysql/charsets/ |
+--------------------------+----------------------------+
8 rows in set (0.001 sec)

MariaDB [(none)]> select "å" ;
+----+
| å  |
+----+
| å  |
+----+
1 row in set (0.000 sec)

MariaDB シェルに入力または貼り付けて特殊文字を表示できるようになりました。
デフォルト設定を使用するときにMariaDBシェルに特殊文字を入力して表示できる理由を説明してください。

@roaima、特殊文字の貼り付け、入力に失敗するのは、私のカスタム設定によるものです。

cat    /etc/mysql/mariadb.cnf
[client]
default-character-set = utf8mb4
[mysql]
default-character-set = utf8mb4
[mysqld]

character-set-server = utf8mb4
collation-server = utf8mb4_unicode_ci
init_connect = 'SET NAMES utf8mb4'
init_connect = 'SET collation_connection = utf8mb4_unicode_ci'

以下は、特殊文字を正常に貼り付けて入力するためのデフォルト設定です。

cat /etc/mysql/mariadb.cnf
[client]
[mysql]
[client-server]
socket = /run/mysqld/mysqld.sock
!includedir /etc/mysql/conf.d/
!includedir /etc/mysql/mariadb.conf.d/

ベストアンサー1

'mysql --version'の出力は、mysqlクライアントがreadlineではなくEditLineに接続されていることを示します。 readlineに関連付けられているmysqlクライアントを試してみてください(コミュニティパッケージまたは直接コンパイル)。これは、少なくともUbuntuの場合は既知のバグのようです。

https://bugs.launchpad.net/ubuntu/+source/mysql-5.7/+bug/1853818

おすすめ記事