Mybatis写入字符串过长抛出 Data truncation: Data too long for column ‘xxxx‘

在存储Json字符串的时候报错

com.mysql.jdbc.MysqlDataTruncation: Data truncation: Data too long for column 'column_name'

这种情况不只出现在mybatis中,其他ORM也有类似情况,

这个错误是由于插入或更新的数据长度超出了 MySQL 数据库表中该列定义的最大长度限制

但是其实我的数据并没有超过定义varchar的最大长度,请查看自己是否超过的定义长度。

加上下面链接配置解决:

?sessionVariables=sql_mode='NO_ENGINE_SUBSTITUTION'&jdbcCompliantTruncation=false

这段配置 MySQL 数据库连接的 URL 中的会话变量,影响数据库的行为:

  1. sessionVariables=sql_mode='NO_ENGINE_SUBSTITUTION':

    • sql_mode 是 MySQL 的 SQL 模式设置,它控制 SQL 语法和数据处理行为的细节。

    • NO_ENGINE_SUBSTITUTION 是 SQL 模式的一个选项。当启用时,如果 MySQL 试图创建一个存储引擎不可用的表,而未指定其他引擎,MySQL 将抛出错误,而不是使用默认的存储引擎。这个设置可以提高开发者对数据引擎的掌控。

    • 影响:这个模式会阻止 MySQL 自动使用默认存储引擎(通常是 InnoDB)来替换用户指定但不可用的存储引擎,确保如果指定引擎不可用,直接报错。

  2. jdbcCompliantTruncation=false:

    • 这个参数与 JDBC 规范的遵从性有关。默认情况下,JDBC 规范要求当插入的数据超过列的最大长度时,抛出异常 Data truncation

    • 设置 jdbcCompliantTruncation=false 表示禁用这种行为,使 MySQL 不会因为数据截断(例如插入的数据超过列定义的最大长度)而抛出异常。

    • 影响:禁用 jdbcCompliantTruncation 后,MySQL 在插入超出列长度的数据时会默默截断数据,而不会抛出异常。如果不想要这种行为,建议谨慎使用这个配置。

总结

  • NO_ENGINE_SUBSTITUTION:控制存储引擎替换行为,确保指定存储引擎不可用时抛出错误。
  • jdbcCompliantTruncation=false:禁用 JDBC 规范中规定的数据截断异常,允许数据被截断插入。

这两项设置改变了数据库和应用程序如何处理存储引擎替换和数据截断异常,允许更灵活的错误处理。

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值