SpringBoot/JPA操作MySQL latin1表时数据截断错误的解决
问题描述
我们正将软件从PHP迁移至Java,采用SpringBoot/JPA存储数据。当前所有数据存储在使用latin1排序规则(ISO-8859-1)的MySQL中,暂无法修改。
在PHP系统中,向数据库存储UTF8字符可正常工作,非UTF8字符会被省略或替换为"?"。但通过SpringBoot存储含UTF8字符的字符串时,出现如下异常:
2022-07-25 10:54:43.894 WARN 84143 --- [nio-8080-exec-7] o.h.engine.jdbc.spi.SqlExceptionHelper : SQL Error: 1366, SQLState: 22001 2022-07-25 10:54:43.897 ERROR 84143 --- [nio-8080-exec-7] o.h.engine.jdbc.spi.SqlExceptionHelper : Data truncation: Incorrect string value: '\xEF\x82\xA7;\x0A\x09...' for column `tanss`.`mails`.`body` at row 1
请问是否有办法在持久化前忽略这些字符,仅存储latin1字符?比如在application.properties或MySQL服务器中设置?
已验证的解决方案
我已解决该问题。若其他人遇到使用latin1排序规则的同类问题:MySQL驱动8.0.29不再根据MySQL服务器默认字符集确定编码,默认使用utf8mb4。在JDBC URL中添加&characterEncoding=latin1即可解决!
内容的提问来源于stack exchange,提问作者Fasty
相关产品推荐
相关产品推荐

