当前位置: 首页 > 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 错误。

相关文章:

  • ROS中的里程计与IMU的消息类型解读
  • Python 类型注释 - typing
  • 如何确定微服务的粒度与边界
  • C++抽象类与多态实战解析
  • 算法训练第八天
  • Vue Router 导航方法完全指南
  • 【使用 Loki + Promtail + Grafana 搭建轻量级容器日志分析平台】
  • dxf、dwg中文字矩阵变换
  • 安装 Nginx
  • QT链接其他项目的C++文件报链接错误
  • sifli 52 反馈standby待机rc10k 15秒校准起来后,底电流会变大
  • 交叉熵的意义
  • Linux-linux和windows创建新进程的区别以及posix_spawn
  • 04.两数之和
  • 数据库同步是什么意思?数据库架构有哪些?
  • 《AI角色扮演反诈技术解析:原理、架构与核心挑战》
  • Linux基础开发工具——yum工具
  • QML技术优势
  • day21 常见的降维算法
  • 英国2025年战略防御评估报告:网络与电磁域成现代战争核心
  • 网站设计模板是什么/推广产品的方法和步骤
  • 制作彩页用什么软件/网站标题优化排名
  • 青岛定制网站设计公司/seo怎样
  • 网站后台模板论坛/seo具体优化流程
  • 凡科网做网站要钱吗/seo全称是什么意思
  • 北京主页网站建设/个人代运营一般怎么收费