问题描述
问题排查
- 检查数据库的字符集
mysql> show variables like '%character%';
+--------------------------+--------------------------------+
| Variable_name | Value |
+--------------------------+--------------------------------+
| character_set_client | latin1 |
| character_set_connection | latin1 |
| character_set_database | utf8mb4 |
| character_set_filesystem | binary |
| character_set_results | latin1 |
| character_set_server | utf8mb4 |
| character_set_system | utf8mb3 |
| character_sets_dir | /usr/share/mysql-8.0/charsets/ |
+--------------------------+--------------------------------+
8 rows in set (0.00 sec)
mysql>
- 手工修改字符集问题解决
mysql> set character_set_client='utf8mb4';
Query OK, 0 rows affected (0.00 sec)
mysql> set character_set_connection='utf8mb4';
Query OK, 0 rows affected (0.00 sec)
mysql> set character_set_results='utf8mb4';
Query OK, 0 rows affected (0.00 sec)
mysql> show variables like '%character%';
+--------------------------+--------------------------------+
| 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 | utf8mb3 |
| character_sets_dir | /usr/share/mysql-8.0/charsets/ |
+--------------------------+--------------------------------+
8 rows in set (0.00 sec)
mysql> select id, name, intro, effective_time from activity;
+----+--------------------------------------+-----------------------------------------------------+----------------------------+
| id | name | intro | effective_time |
+----+--------------------------------------+-----------------------------------------------------+----------------------------+
| 1 | 长安街七月忆唐诗文品鉴会 | 快来参加吧长安街七月忆唐诗文品鉴会 | 2022-07-18 09:09:48.196376 |
+----+--------------------------------------+-----------------------------------------------------+----------------------------+
1 row in set (0.00 sec)
mysql>
问题解决
乱码问题一般都是字符集设置问题,可以手工修改 MySQL 的字符集,或者 登入容器时指定操作系统的字符集。
[root@localhost ~]# docker exec -it mysql3306 env LANG=C.UTF-8 /bin/bash
root@8474f8b17049:/# mysql -uroot -pabcd1234..
mysql> select id, name, intro, effective_time from activity;
+----+--------------------------------------+-----------------------------------------------------+----------------------------+
| id | name | intro | effective_time |
+----+--------------------------------------+-----------------------------------------------------+----------------------------+
| 1 | 长安街七月忆唐诗文品鉴会 | 快来参加吧长安街七月忆唐诗文品鉴会 | 2022-07-18 09:09:48.196376 |
+----+--------------------------------------+-----------------------------------------------------+----------------------------+
1 row in set (0.00 sec)
mysql> show variables like '%character%';
+--------------------------+--------------------------------+
| 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 | utf8mb3 |
| character_sets_dir | /usr/share/mysql-8.0/charsets/ |
+--------------------------+--------------------------------+
8 rows in set (0.01 sec)
mysql>