com.mysql.jdbc.MysqlDataTruncation:数据截断:列’column_name’的数据太长

我正在使用Java JDBC和MySQL,我收到此错误:

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

我该如何解决这个错误?

这看起来很明显,而且确实如此。 您显然尝试插入或更新一行,其中“column_name”列的值大于适合所述列的值。

例如,如果它是CHAR或VARCHAR,则可能有一个比列的定义大小更长的字符串。

您修复此问题的选择也很明显 – 要么确保您存储的数据不大于列(可能通过在存储它们之前截断更长的字符串),要么增加数据库列的大小。

如何在mysql终端中重现此错误:

 mysql> create table penguins(val CHAR(2)); Query OK, 0 rows affected (0.08 sec) mysql> insert into penguins values("AB"); Query OK, 1 row affected (0.00 sec) mysql> insert into penguins values("ABC"); Query OK, 1 row affected, 1 warning (0.01 sec) mysql> show warnings; +---------+------+------------------------------------------+ | Level | Code | Message | +---------+------+------------------------------------------+ | Warning | 1265 | Data truncated for column 'val' at row 1 | +---------+------+------------------------------------------+ 1 row in set (0.00 sec) 

这是你得到的错误,但是在MySQL终端显示它作为警告仍然插入你的行,只是默默地截断它。

MySQL JDBC并不宽容,并且会发出硬错误并且不会插入行。

2解决方案

要么增加要插入的数据类型的容量,要么减小放在那里的内容的大小。

增加列大小的图例:

 If you are using then use this ----------------- -------------- smallint int int long TEXT LONGTEXT LONGTEXT CLOB CLOB Store the content to disk, and save the filename in the db. 

在我的情况下上传的数据包含引号(’和“)。这就是为什么我得到你上面提到的相同的exception。删除成功插入到表中的数据内的引号。

我在我的spring boot数据jpa应用程序中遇到了同样的问题,当我要将数据库中的图像文件作为字节插入时给出了同样的错误。

经过多次研发,我找到了如下解决方案。

我在application.properties文件中添加了以下行并解决了这个问题

 spring.datasource.url=jdbc:mysql://localhost:3306/conweb?sessionVariables=sql_mode='NO_ENGINE_SUBSTITUTION'&jdbcCompliantTruncation=false 

希望它对某人有帮助。

出现此错误的原因是,您尝试插入列的数据大小太大。

解决方案 – 将列大小更改为max.Assuming您的列的类型为VARCHAR,然后在mySQL中

 ALTER TABLE table_name CHANGE COLUMN col_name col_name VARCHAR(1000); //assuming 1000 is enough