You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Docker部署MySQL 8.0后西里尔字符显示为????的解决求助

解决MySQL Docker容器中俄语字符显示为"????"的问题

你已确认数据库级字符集和排序规则为utf8mb4,但查询时俄语字符仍显示问号,可按以下步骤排查修复:

1. 检查表和字段的字符集配置

数据库级utf8mb4是默认规则,但创建表时可能未继承该配置,导致表/字段使用了不支持西里尔字符的编码。执行以下命令确认:

-- 查看students表的创建语句,确认字符集
SHOW CREATE TABLE students;

-- 查看所有字段的字符集和排序规则
SHOW FULL COLUMNS FROM students;

若输出中表的CHARSET不是utf8mb4,或文本字段(如last name、first name等)的Collation非utf8mb4开头的规则,说明表/字段编码有误。

2. 修正表和字段的字符集

执行以下SQL将students表及所有文本字段转换为utf8mb4编码:

ALTER TABLE students CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci;

该命令会自动统一表中所有文本类型字段(VARCHAR、TEXT等)的编码,并更新表的默认字符集。

3. 确保数据库连接时指定utf8mb4编码

连接数据库时未指定字符集会导致传输过程中编码转换错误,需在连接时明确指定:

  • 命令行连接:
    mysql -u 用户名 -p --default-character-set=utf8mb4
    
  • 应用程序连接:在连接字符串中添加字符集参数,例如:
    • Python(pymysql):conn = pymysql.connect(host='xxx', user='xxx', password='xxx', db='xxx', charset='utf8mb4')
    • Java(JDBC):jdbc:mysql://xxx:3306/xxx?useUnicode=true&characterEncoding=utf8mb4

4. 配置Docker容器的MySQL默认字符集

若容器启动时未设置全局字符集,重启后可能恢复默认编码,需在启动时添加参数或挂载配置文件:

  • 启动容器时指定参数:
    docker run -d \
      --name mysql-container \
      -e MYSQL_ROOT_PASSWORD=your_password \
      -p 3306:3306 \
      mysql:8.0 \
      --character-set-server=utf8mb4 \
      --collation-server=utf8mb4_0900_ai_ci \
      --init_connect='SET NAMES utf8mb4'
    
  • 挂载自定义my.cnf配置文件:
    创建my.cnf文件,内容如下:
    [mysqld]
    character-set-server=utf8mb4
    collation-server=utf8mb4_0900_ai_ci
    init_connect='SET NAMES utf8mb4'
    
    [client]
    default-character-set=utf8mb4
    
    启动容器时挂载该文件:
    docker run -d \
      --name mysql-container \
      -e MYSQL_ROOT_PASSWORD=your_password \
      -p 3306:3306 \
      -v /path/to/your/my.cnf:/etc/mysql/my.cnf \
      mysql:8.0
    

注意事项

如果是已存储的乱码数据,仅修改编码配置无法恢复,需要重新插入使用utf8mb4编码的俄语字符数据。

内容的提问来源于stack exchange,提问作者Kto Ya

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.13 03:05:10