dockermysql无法输入中文

编程

这个问题分为两个小问题

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"格式即可解决问题

只要这样进入容器即可输入中文:

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中设置。

问题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

以上是 dockermysql无法输入中文 的全部内容, 来源链接: utcz.com/z/519082.html

回到顶部