docker mysql 沒法輸入中文

這個問題分爲兩個小問題

在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
由於沒有掛載數據卷,因此此處沒有設置其餘配置
以與方式1相同的方式進入容器,也能解決兩種狀況下不能輸入中文的問題
字符集同方式1
仍是方式1比較好,管理數據更加方便。
參考鏈接https://cloud.tencent.com/developer/article/1500399
相關文章
相關標籤/搜索