Spring Boot+MySQL插入数据报错:Incorrect string value求助
解决MySQL字符插入错误的方案
问题根源
错误Incorrect string value: '\x92s sal...'是因为插入的字符串包含Windows-1252编码的特殊字符(比如\x92是右单引号、\x96是长破折号),这类字符不属于标准UTF-8编码范围;同时你的表默认字符集为utf8mb3,尽管description列单独设置了utf8mb4,但数据库连接、表级字符集的配置不匹配,导致字符转换失败。
具体解决步骤
1. 完善数据库连接URL参数
现有URL仅配置了基础的UTF-8参数,MySQL 8.x需补充参数确保连接全程使用utf8mb4:
spring.datasource.url=jdbc:mysql://localhost:3306/alpha_4_1661946202334?useUnicode=true&characterEncoding=UTF-8&useSSL=false&serverTimezone=UTC&characterSetResults=utf8mb4&connectionCollation=utf8mb4_0900_ai_ci
characterSetResults=utf8mb4:指定查询结果的字符集connectionCollation=utf8mb4_0900_ai_ci:对齐连接与列的排序规则
2. 统一表与数据库的字符集为utf8mb4
表默认字符集utf8mb3会干扰列级的utf8mb4配置,执行以下SQL修改:
-- 修改表的字符集和所有列的字符集 ALTER TABLE mediacontentvariantentity CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci; -- 可选:修改整个数据库的默认字符集 ALTER DATABASE alpha_4_1661946202334 CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci;
3. 处理输入字符串中的非UTF-8字符
如果数据来自旧系统(如Windows文本),需先转换为标准UTF-8或过滤无效字符:
- 编码转换(Java代码):
import java.nio.charset.StandardCharsets; String rawContent = "原始带特殊字符的内容"; // 将Windows-1252编码的字符串转为UTF-8 String utf8Content = new String(rawContent.getBytes("Windows-1252"), StandardCharsets.UTF_8);
- 过滤无效字符(Java代码):
// 保留常见可显示字符,移除无效UTF-8字符 String cleanContent = rawContent.replaceAll("[^\\x00-\\x7F\\x80-\\xFF\\u0100-\\u017F\\u0180-\\u024F\\u1E00-\\u1EFF]", "");
4. 修正Hibernate方言配置
MySQL 8.x需使用对应版本的方言:
spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.MySQL8Dialect
验证方式
- 插入包含特殊字符的测试数据,确认无报错
- 查询表结构,确认字符集配置生效:
SHOW CREATE TABLE mediacontentvariantentity;
内容的提问来源于stack exchange,提问作者Saurabh Kr. Verma
相关产品推荐
相关产品推荐

