如何在Spring Boot中正确读取MySQL表中的特殊字符µ
解决MySQL特殊字符µ在Spring Boot中解析为�的问题
问题定位
MySQL控制台执行SELECT * FROM PLAYER\G时,SCALE字段显示为µs,但Spring Boot读取后变成�s,说明字符在JDBC传输或Java解析环节出现编码不匹配,而非数据存储问题。
解决方案
1. 确认数据库、表、字段的字符集
先检查数据库层面的编码配置,确保全链路支持Unicode特殊字符:
- 查询数据库字符集:
需确保数据库字符集为SHOW CREATE DATABASE your_database_name;utf8mb4(MySQL中的utf8实际是utf8mb3,不支持部分Unicode字符)。 - 查询表字符集:
表的默认字符集需为SHOW CREATE TABLE PLAYER;utf8mb4。 - 查询字段字符集:
SCALE字段的字符集需为SHOW FULL COLUMNS FROM PLAYER WHERE Field = 'SCALE';utf8mb4。
2. 修正JDBC URL编码配置
调整spring.datasource.url,确保驱动与数据库交互时使用正确的编码:
spring.datasource.url=jdbc:mysql://localhost:3306/your_database?useUnicode=true&characterEncoding=utf8mb4&useSSL=false&serverTimezone=UTC&useLegacyDatetimeCode=false
characterEncoding=utf8mb4:指定驱动与数据库交互的编码为utf8mb4,支持完整Unicode字符。- 注意:MySQL JDBC驱动8.0+版本才支持该参数,旧版本需升级驱动。
3. 升级MySQL JDBC驱动版本
使用8.0.x及以上版本的驱动,确保对utf8mb4的完整支持。Maven依赖配置示例:
<dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>8.0.33</version> </dependency>
4. 检查代码读取逻辑
确保读取SCALE字段时直接使用String类型,避免额外编码转换:
- JDBC原生读取:
String scale = resultSet.getString("SCALE"); - MyBatis映射:
在实体类中直接用String类型映射SCALE字段,无需自定义类型处理器。
5. 验证结果
重启Spring Boot应用后重新读取数据,此时SCALE字段应正确显示为µs,输出符合预期:
{"Object":"VLC", "Scale":"µs"}
内容的提问来源于stack exchange,提问作者p zankat
相关产品推荐
相关产品推荐

