내 운영 체제 정보:
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