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=

웹페이지의 특수문자를 클립보드에서 복사하여 å마우스패드와 쉘 터미널에 붙여넣으면 정상적으로 표시될 수 있습니다.

여기에 이미지 설명을 입력하세요.

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

답변2

mysql 셸에서 다음을 시도해 보세요.

SET NAMES 'utf8';

음...알았어이것. 특히

[myslqd]
skip-character-set-client-handshake
collation_server=utf8_unicode_ci
character_set_server=utf8 

관련 정보