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

如何在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。
  • 查询字段字符集:
    SHOW FULL COLUMNS FROM PLAYER WHERE Field = 'SCALE';
    
    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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 13:20:28