关于 MySQL 连接不上和中文字符集问题的总结

问题描述

在使用 MySQL 时,我遇到了一些连接问题,尤其是在处理中文字符集时出现了乱码。经过一些排查,我发现问题与 MySQL 的字符集设置有关。


修改字符集配置

在 Linux 系统中,可以通过编辑 MySQL 的配置文件来修改字符集。路径是 /etc/mysql/mysql.conf.d/mysqld.cnf,而在 Windows 系统中,通常是 my.ini 文件。
图片1
我修改了以下几个配置项来解决字符集问题:

  • character-set-server: 设置服务器的默认字符集为 utf8mb4,这是 MySQL 最推荐的字符集,支持所有 Unicode 字符。

    1
    character-set-server = utf8mb4
  • collation-server: 设置服务器的默认排序规则为 utf8mb4_unicode_ci,这是 utf8mb4 字符集的通用排序规则。

    1
    collation-server = utf8mb4_unicode_ci
  • init-connect: 在每个客户端连接时设置字符集为 utf8mb4

    1
    init-connect='SET NAMES utf8mb4'

这些设置确保了 MySQL 使用支持所有 Unicode 字符的字符集和排序规则。
图片1

图片1

数据已导入后无法直接修改

修改字符集设置后,我发现由于数据已经导入到数据库中,直接修改字符集配置并不能生效。为了解决这个问题,我需要手动重新执行建表语句。


优化流程

在执行这些更改时,我的建议是:

  1. 先修改配置文件,确保 MySQL 使用 utf8mb4 字符集。
  2. 然后重新执行插入语句,确保数据表使用正确的字符集。

为了更好地管理这个过程,我将这些操作写入了 start.sh 脚本,确保每次启动容器时,MySQL 都能自动加载这些配置。


重新构建镜像

在我重新构建镜像后,发现字符集问题已经得到解决,并且中文字符能够正常显示。镜像构建时,我确保了配置的正确性,避免了手动操作时可能出现的错误。


小结

通过这次解决 MySQL 连接和字符集问题的经历,我学到了如何正确设置 MySQL 的字符集配置,并避免字符集不匹配导致的乱码问题。修改配置文件后,我手动执行了建表语句,并且在重新构建镜像时确保了问题得到解决。将这些操作写入脚本中,也大大简化了以后部署的过程。

图片1