Docker中MySQL的乱码问题

"博主在部署MySQL Docker容器时遇到乱码问题,通过检查发现容器的字符集设置不正确。尝试了在启动参数和挂载配置文件中指定字符集的方法未成功。最后,博主通过在Dockerfile中设置ENV LANG="en_US.UTF-8"解决了问题,强调了解决问题需从不同角度思考。"
摘要由CSDN通过智能技术生成

最近在学习使用Docker,在部署MySQL容器时遇到了乱码问题。

检查了一下发现编码集出了问题

mysql> status
--------------
mysql  Ver 8.0.27 for Linux on x86_64 (MySQL Community Server - GPL)

Connection id:          9
Current database:
Current user:           root@localhost
SSL:                    Not in use
Current pager:          stdout
Using outfile:          ''
Using delimiter:        ;
Server version:         8.0.27 MySQL Community Server - GPL
Protocol version:       10
Connection:             Localhost via UNIX socket
Server characterset:    utf8mb4
Db     characterset:    utf8mb4
Client characterset:    latin1
Conn.  characterset:    latin1
UNIX socket:            /var/run/mysqld/mysqld.sock
Binary data as:         Hexadecimal
Uptime:                 6 min 29 sec

 我第一时间是去查DockerHub上的MySQL的官方文档

官方文档https://hub.docker.com/_/mysql

找到了两种办法

1、创建容器的时候按照这种格式指定字符集

docker run --name some-mysql -e MYSQL_ROOT_PASSWORD=my-secret-pw -d mysql:tag --character-set-connection=utf8 --character-set-client=utf8

尝试后还是存在乱码问题

 2、挂载配置文件

[client]
default-character-set=utf8

[mysqld]
init_connect='SET collation_connection = utf8_unicode_ci'
init_connect='SET NAMES utf8'
character-set-server=utf8
character-set-connection=utf8
character-set-client=utf8
collation-server=utf8_unicode_ci
skip-character-set-client-handshake

symbolic-links=0

[mysql]
default-character-set = utf8

 也还是不行,想了想这两种方式好像并没有本质上上的区别

焦头烂额一段时候后,我换了一种思路,从容器出发

查看了一下容器的字符集

# 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=

果然有问题

于是指定了一下容器的字符集

在Dockerfile中家里一句

ENV  LANG="en_US.UTF-8"

完美解决,只需要在Dockerfile中加一行配置。

这就是告诉了我,遇到问题换个思路也许能有意想不到的收获

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值