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

Spring Boot 2.6.6集成MySQL 8插入超255字符字符串触发数据截断错误(Error 1406, SQLState 22001)

Spring Boot 2.6.6集成MySQL 8插入超255字符字符串触发数据截断错误(Error 1406, SQLState 22001)

我之前碰到过一模一样的坑,结合你给出的环境信息和报错细节,咱们一步步来排查解决这个问题:

先排查最可能的原因:JPA实体类的字段约束

你数据库里已经把字段改成varchar(2000)甚至longtext了,但插入255字符就报错,90%的概率是你的JPA实体类里给comment字段硬设了255的长度限制——哪怕数据库改了,Hibernate还是会按照实体类的定义做插入校验,甚至自动覆盖数据库的字段设置。

检查你的实体类代码,是不是有类似这样的写法:

@Column(length = 255) // 这里硬限制了255字符
private String comment;

如果是,改成对应数据库字段的配置:

  • 对应varchar(2000)的写法:
    @Column(length = 2000)
    private String comment;
    
  • 对应longtext的写法(更稳妥,适合长文本场景):
    @Column(columnDefinition = "longtext")
    private String comment;
    

检查Hibernate的DDL自动生成配置

如果你的项目里设置了spring.jpa.hibernate.ddl-auto=update或者create,Hibernate会根据实体类的定义自动更新数据库表结构。也就是说,哪怕你手动去数据库把字段改成了2000长度或者longtext,Hibernate在启动时可能又把它改回255了。

解决办法:

  • 把spring.jpa.hibernate.ddl-auto改成none(生产环境推荐),确保数据库的字段设置不会被框架覆盖;
  • 或者同步实体类和数据库的字段定义,让Hibernate生成的表结构完全符合你的需求。

验证数据库连接参数(保险起见)

虽然MySQL 8.0的驱动默认用utf8mb4编码,但有时候连接URL里没明确指定的话,可能会出现编码不一致的问题(比如某些特殊字符占用多字节,导致实际长度计算超标)。检查你的数据源配置,确保URL里加上了这些参数:

spring.datasource.url=jdbc:mysql://localhost:3306/your_database?useSSL=false&serverTimezone=UTC&characterEncoding=utf8mb4&useUnicode=true

绕过应用层直接测试数据库

如果上面的方法都没用,你可以直接用MySQL客户端(比如Workbench、Navicat)执行插入语句,插入300字符到comment字段:

INSERT INTO your_table (comment) VALUES ('这里放300个字符的测试内容...');
  • 如果能成功插入,说明问题肯定在Spring Boot应用的配置里(比如实体类注解、Hibernate设置);
  • 如果还是报错,那你需要确认数据库里的字段是不是真的改成了varchar(2000)或者longtext,可以用DESCRIBE your_table;查看字段的实际定义。

内容来源于stack exchange

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.08 10:17:57