docker 中 MySQL 的默认编码为 latin1,这会导致中文乱码,因此我们需要修改 MySQL 的默认字符集。
我们可以通过以下几种方式来修改 MySQL 的默认字符集。
修改配置文件
我们可以通过修改配置文件的形式,来改变字符集。
1 | [client] |
修改 docker 启动命令
我们也可以通过修改 docker 命令来实现:
1 | docker run mysql --name mysql --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci --skip-character-set-client-handshake |
修改 docker-compose 配置文件
如果使用了 docker-compose,那么可以这样:
1 | mysql: |
附言
特别地,我们来解释下 skip-character-set-client-handshake
命令的作用。
我们可以看下 MySQL 官方手册的如下片段:
--character-set-client-handshake
Property Value Command-Line Format `–character-set-client-handshake[={OFF Type Boolean Default Value ON
Do not ignore character set information sent by the client. To ignore client information and use the default server character set, use
--skip-character-set-client-handshake
; this makes MySQL behave like MySQL 4.0.
也就是说在默认情况下,MySQL 客户端是使用客户端设置的编码的。可以通过 --skip-character-set-client-handshake
来让客户端使用服务端的编码,来保持编码的一致性。因为我们 docker 里边多数情况下都是连接 docker 里边的 MySQL 服务,所以设置 --skip-character-set-client-handshake
是非常合理的一个情况,这样便不必单独再去设置客户端编码。