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

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

验证方式

  1. 插入包含特殊字符的测试数据,确认无报错
  2. 查询表结构,确认字符集配置生效:
SHOW CREATE TABLE mediacontentvariantentity;

内容的提问来源于stack exchange,提问作者Saurabh Kr. Verma

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 20:12:49