這個問題分爲兩個小問題
在mysql5.7下有兩個問題,在mysql8.0之後只需解決第一個問題便可
問題1:經過docker進入mysql容器後沒法輸入中文
字符集問題
進入容器 查看字符集
user@ubuntu:docker4$ docker exec -it eff bash root@effcef2646f7:/#locale LANG= LANGUAGE= LC_CTYPE="POSIX" LC_NUMERIC="POSIX" LC_TIME="POSIX" LC_COLLATE="POSIX" LC_MONETARY="POSIX" LC_MESSAGES="POSIX" LC_PAPER="POSIX" LC_NAME="POSIX" LC_ADDRESS="POSIX" LC_TELEPHONE="POSIX" LC_MEASUREMENT="POSIX" LC_IDENTIFICATION="POSIX" LC_ALL=
查看容器支持的字符集
root@effcef2646f7:/# locale -a C C.UTF-8 POSIX
不能輸入中文緣由:
系統使用的是POSIX字符集,POSIX字符集是不支持中文的,而C.UTF-8是支持中文的 只要把系統中的環境 LANG 改成"C.UTF-8"格式便可解決問題mysql
只要這樣進入容器便可輸入中文:
docker exec -it eff env LANG=C.UTF-8 bash root@ubuntu:docker4$ docker exec -it eff env LANG=C.UTF-8 bash root@effcef2646f7:/# 中文
注意:這樣修改只是臨時修改。要永久修改,須要在建立容器時在dockerfile中設置。sql
問題2: 經過docker進入mysql容器後,mysql控制檯沒法輸入中文
首先保證問題1 可以解決
剩下的就是數據庫的字符編碼問題了,這裏有兩種方式解決這個問題
方式1
啓動容器
docker run -p 3308:3306 --name mysql57_3 \ -v /home/user/mysql/docker4/conf:/etc/mysql \ -v /home/user/mysql/docker4/logs:/var/log/mysql \ -v /home/user/mysql/docker4/data:/var/lib/mysql \ -e MYSQL_ROOT_PASSWORD=root \ -d mysql:5.7.31
相應配置
user@ubuntu:docker4$ cat conf/my.cnf [mysqld] #log-bin=replicas-mysql-bin character-set-server=utf8mb4
運行結果
user@ubuntu:docker4$ docker exec -it eff env LANG=C.UTF-8 bash root@effcef2646f7:/# 中文 bash: 中文: command not found root@effcef2646f7:/# mysql -uroot -p Enter password: Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 7 Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. mysql> 中文
查看字符集
mysql> 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.00 sec)
方式2
啓動容器
docker run -p 3308:3306 --name mysql57_3 \ -e MYSQL_ROOT_PASSWORD=root \ -d mysql:5.7.31 \ --character-set-server=utf8mb4 \ --collation-server=utf8mb4_unicode_ci