java连接mysql时抛出Data truncation: Data too long for column xxx

当往数据库中插入语句时,连接池抛出了“com.mysql.jdbc.MysqlDataTruncation: Data truncation: Data too long for column 'xxx' at row xxx”的异常。

从提示的信息表面上来看,说是什么数据对于列“xxx”过长。于是修改了数据库,如mysql中text类型是可变长度的字符串,最多65535个字符,把字段类型改成MEDIUMTEXT(最多存放16777215个字符)或者LONGTEXT(最多存放4294967295个字符)。

结果并不成功解决,那么肯定还存在新的问题。

将目光转到编码问题上,编码分代码层和数据库本身,代码层使用了utf-8,那基本上是标准的。通过发现,数据库里的出异常的列编码并不是utf-8的,也就是说存在里外编码格式不统一的情况。

好了,问题解决了,总结下:

1、尝试调整字段的类型,如文章描述的那样,改长或改为更大的类型;

2、尝试审计异常列所在的表,看编码的格式可与代码层统一。

相关推荐:
发现升级到MySQL 5.7后,这个错误开始发生在随机情况下产生,即便是没有在查询中提供一个日期。 这似乎是因为早期版本的MySQL支持的日期,例如0000-00-00 00:00:00(默认情况下),然而5.7.4引入了对NO_ZER …
可能很多人在MySQL 8.0中修改密码时遇到了很多问题,比如重置密码,还是用的旧的命令去修改密码,导致报错,因为 MySQL 5.7.6 以后废弃了 user 表中的 password 字段和 password() 方法,所以使用旧的方法 …
现在的第三方远程数据库管理可视化工具比较多,如:Navicat、SQLyog、MySQL workbench 等,但发现正确的账户信息连接时报 2059 错误,怎么了?这是因为 MySql8.0 版本 和 5.0 的加密规则不一样,而现在的可 …
其实这个问题从jdk9之后开始就会存在,之后的版本将不再提供tools.jar和dt.jar了,也不需要在classpath里面配置这些jar了,那么怎么配是最科学的? 配置可参考这样: JAVA_HOME=jdk安装路径 JRE_HOME=jre安 …
CSRF是Cross Site Request Forgery的缩写(也缩写为CSRF),直译过来就是跨站请求伪造的意思,也就是在用户会话下对某个CGI做一些GET/POST的事情。这些事情用户未必知道和愿意做,你可以把它想做HTTP会话劫 …
拿起手机扫一扫即可带走我!