1. 程式人生 > 其它 >docker mysql 5.7以上支援中文編碼問題

docker mysql 5.7以上支援中文編碼問題

問題在部署時一直報錯:

django.db.utils.OperationalError: (1067, "Invalid default value for 'project_name'")

查了下就是不支援中文輸入和讀取

[root@hadoop mysql]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
ccc1776cb6b5 nginx:alpine "/docker-entrypoint.…" 56 minutes ago Up 7 minutes 0.0.0.0:80->80/tcp drf-backend-platform_nginx_1
8ccf680a14b9 drf-backend-platform_rookie "/bin/bash -c 'pytho…" 56 minutes ago Restarting (1) 8 seconds ago rookie
48a92c5c2bff mysql:5.7 "docker-entrypoint.s…" 3 hours ago Up 7 minutes 3306/tcp, 33060/tcp mysql
ad2e3411542f redis:alpine "docker-entrypoint.s…" 17 hours ago Up 7 minutes 6379/tcp drf-backend-platform_redis_1
[root@hadoop mysql]# docker exec -it 48a92c5c2bff /bin/bash
root@mysql:/# mysql -u root -p
Enter password:
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 114
Server version: 5.7.34 MySQL Community Server (GPL)

Copyright (c) 2000, 2021, Oracle and/or its affiliates.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql> SHOW VARIABLES LIKE 'character_set_%';
+--------------------------+----------------------------+
| Variable_name | Value |
+--------------------------+----------------------------+
| character_set_client | latin1 |
| character_set_connection | latin1 |
| character_set_database | latin1 |
| character_set_filesystem | binary |
| character_set_results | latin1 |
| character_set_server | latin1 |
| character_set_system | utf8 |
| character_sets_dir | /usr/share/mysql/charsets/ |
+--------------------------+----------------------------+
8 rows in set (0.03 sec)

mysql> SHOW VARIABLES LIKE 'collation_%';
+----------------------+-------------------+
| Variable_name | Value |
+----------------------+-------------------+
| collation_connection | latin1_swedish_ci |
| collation_database | latin1_swedish_ci |
| collation_server | latin1_swedish_ci |
+----------------------+-------------------+

圖上的第一個 connection 就是我們通過workbench等客戶端連線的時候指定的編碼。
外部訪問資料亂碼的問題就出在這個connection連線層上

1.先解決外部訪問資料亂碼的問題

SET NAMES 'utf8';

它相當於下面的三句指令:

SET character_set_client = utf8;
SET character_set_results = utf8;
SET character_set_connection = utf8;

進入mysql docker 容器修改配置my.cnf

docker 裡面安裝vim,:

apt-get update
apt-get install vim

接下來編輯my.cnf,在mysqld下面黏貼幾個玩意

character-set-client-handshake = FALSE

character-set-server = utf8mb4

collation-server = utf8mb4_unicode_ci
重啟docker的mysql容器,解決 :
docker restart mysql

具體資訊見:
https://www.cnblogs.com/Again/articles/9487887.html