当前位置: 首页 > news >正文

java.sql.BatchUpdateException: Incorrect string value: ‘\xF0\x9F\x91\x91**...‘

这个错误是由于 MySQL 数据库无法存储 Emoji 表情等特殊字符 引起的,具体原因是数据库字符集配置不支持 4 字节的 UTF-8 字符(如 Emoji)。以下是完整的解决方案:

问题原因

  1. \xF0\x9F\x91\x91 是一个 Emoji 字符(👑)

  2. MySQL 默认的 utf8 字符集只支持 3 字节字符

  3. 需要 utf8mb4 字符集才能存储 4 字节的 UTF-8 字符

解决方案

步骤 1:修改数据库字符集

-- 修改数据库字符集
ALTER DATABASE your_database_name 
CHARACTER SET = utf8mb4 
COLLATE = utf8mb4_unicode_ci;-- 修改表字符集
ALTER TABLE your_table_name 
CONVERT TO CHARACTER SET utf8mb4 
COLLATE utf8mb4_unicode_ci;-- 修改特定列的字符集(如果只需要改某些列)
ALTER TABLE your_table_name 
MODIFY payer VARCHAR(255) 
CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
步骤 2:修改 MySQL 配置文件 (my.cnf/my.ini)

[client]
default-character-set = utf8mb4[mysql]
default-character-set = utf8mb4[mysqld]
character-set-client-handshake = FALSE
character-set-server = utf8mb4
collation-server = utf8mb4_unicode_ci
init_connect = 'SET NAMES utf8mb4'
步骤 3:验证数据库字符集

-- 检查数据库
SELECT @@character_set_database, @@collation_database;-- 检查表
SHOW CREATE TABLE your_table_name;-- 检查连接
SHOW VARIABLES LIKE 'character_set%';
SHOW VARIABLES LIKE 'collation%';
步骤 4:更新 JDBC 连接字符串

在应用配置中添加 characterEncoding 和 useUnicode 参数:

# application.properties
spring.datasource.url=jdbc:mysql://localhost:3306/your_database? 
useUnicode=true&characterEncoding=utf8mb4&
connectionCollation=utf8mb4_unicode_ci&
useSSL=false&serverTimezone=UTC
步骤 5:验证字符集支持(可选)

创建测试表验证:

CREATE TABLE emoji_test (id INT PRIMARY KEY AUTO_INCREMENT,emoji VARCHAR(255)CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;INSERT INTO emoji_test (emoji) VALUES ('👑');

完整解决方案流程

  1. 备份数据库:防止操作失误

  2. 修改数据库/表字符集:执行步骤 1 的 SQL

  3. 修改 MySQL 配置:步骤 2

  4. 重启 MySQL 服务

  5. 更新应用配置:步骤 4

  6. 重启应用程序

常见问题处理

  1. 索引长度问题

    -- 修改索引长度
    ALTER TABLE your_table 
    MODIFY payer VARCHAR(191) 
    CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

    (InnoDB 索引最大长度 767 字节,191 字符 × 4 字节 = 764 字节)

  2. 连接池配置
    确保连接池不缓存旧字符集的连接:

    # HikariCP 配置
    spring.datasource.hikari.connection-init-sql=SET NAMES utf8mb4
  3. MySQL 版本要求

    • MySQL 5.5.3+ 支持 utf8mb4

    • 建议使用 MySQL 5.7+ 或 MySQL 8.0

  4. 如果无法修改数据库

    // 在 Java 中过滤 Emoji
    public String removeEmoji(String input) {return input.replaceAll("[^\\u0000-\\uFFFF]", "");
    }

验证是否解决

  1. 尝试插入包含 Emoji 的数据:

    INSERT INTO your_table(payer) VALUES ('测试 👑 表情');
  2. 检查数据是否正常存储

  3. 应用程序执行原操作,确认错误消失

重要提示:修改字符集后,确保所有相关表都转换为 utf8mb4,否则部分表仍可能出现类似错误。

通过以上步骤,即可彻底解决 Incorrect string value 错误。

http://www.xdnf.cn/news/874909.html

相关文章:

  • 面试题小结(真实面试)
  • Java编程常见错误与最佳实践
  • machine_env_loader must have been assigned before creating ssh child instance
  • hadoop集群启动没有datanode解决
  • PyCharm项目和文件运行时使用conda环境的教程
  • Python趣学篇:用数学方程绘制浪漫爱心
  • SpringBoot+Mybatisplus配置多数据源(超级简单!!!!)
  • #Java篇:学习node后端之sql常用操作
  • BBU 电源市场报告:深入剖析与未来展望​
  • 洛谷P1591阶乘数码
  • GO语言---函数命名返回值
  • 嵌入式系统中常用的开源协议
  • 41、响应处理-【源码分析】-自定义MessageConverter
  • [C]深入解析条件式日志宏的设计原理
  • Deepfashion2 数据集使用笔记
  • 2025年五一数学建模竞赛A题-支路车流量推测问题详细建模与源代码编写(一)
  • 洛谷 单源最短路径 Dijkstra算法+优先队列
  • 点云数据去噪(Point Cloud Processing Toolbox)
  • C++——智能指针 shared_ptr
  • 小黑黑日常积累:dataclass的简单使用
  • AtCoder解析大全
  • 在RK3588上搭建ROS1环境:创建节点与数据可视化实战指南
  • 基于 qiankun + vite + vue3 构建微前端应用实践
  • 长参考帧LTR
  • 前端八股之JS的原型链
  • 20-项目部署(Docker)
  • 【人工智能】大模型的创造力:从训练到应用的灵感火花
  • 如何配置deepseek + ida-pro-mcp
  • 让AI看见世界:MCP协议与服务器的工作原理
  • [AI Claude] 软件测试2