MySQL查询中文‘温’显示问号,其余中文正常的问题解决
问题排查与解决步骤
可能原因
单个中文显示问号,核心是字符集/排序规则的局部不兼容,常见场景包括:
- 表或字段的字符集未覆盖该汉字的编码范围(比如MySQL 5.7的
utf8是3字节编码,部分生僻字/特殊汉字需4字节编码支持) - 数据库连接时的字符集设置与存储字符集不匹配
- 插入或查询过程中出现编码转换异常
排查操作
检查数据库、表、字段的字符集配置
执行以下SQL命令确认字符集:-- 查看数据库字符集 SHOW CREATE DATABASE your_db_name; -- 查看表字符集 SHOW CREATE TABLE your_table_name; -- 查看目标字段的字符集 SHOW FULL COLUMNS FROM your_table_name LIKE 'your_column_name';重点关注是否使用了
utf8(3字节)而非utf8mb4(完整4字节UTF-8),后者支持所有Unicode字符。验证连接字符集一致性
查看当前连接的字符集参数:SHOW VARIABLES LIKE '%character_set%';确保
character_set_client、character_set_connection、character_set_results三个参数值与存储字符集一致(比如均为utf8mb4)。检查字符编码存储状态
手动插入“温”并查看其十六进制编码:INSERT INTO your_table_name (your_column_name) VALUES ('温'); SELECT HEX(your_column_name) FROM your_table_name WHERE your_column_name = '温';“温”的标准UTF-8编码为
E6B8A9,如果查询结果是3F(问号的ASCII码),说明插入阶段就已出现编码错误。
解决方法
将字段/表字符集改为utf8mb4
如果当前使用utf8,执行以下命令修改:-- 修改表级字符集 ALTER TABLE your_table_name CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; -- 单独修改字段(表级修改不生效时使用) ALTER TABLE your_table_name MODIFY COLUMN your_column_name VARCHAR(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;修正连接字符集设置
- 命令行连接时指定字符集:
mysql -u username -p --default-character-set=utf8mb4 - 应用程序连接字符串中添加字符集参数(比如JDBC串添加
useUnicode=true&characterEncoding=utf8mb4)
- 命令行连接时指定字符集:
配置全局默认字符集
修改MySQL配置文件(my.cnf或my.ini),添加或更新以下配置,重启服务生效:[mysqld] character-set-server=utf8mb4 collation-server=utf8mb4_unicode_ci [client] default-character-set=utf8mb4
操作失误排查
基本不属于操作失误,多是字符集配置遗漏:
- 建表/字段时误选
utf8而非utf8mb4 - 连接数据库时未指定正确的字符集,导致编码转换错误
- 使用的客户端工具字符集设置与MySQL不匹配
内容的提问来源于stack exchange,提问作者Tzu-Chao Wang
相关产品推荐
相关产品推荐

