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

时间:2012-11-26 14:44:17

标签: java mysql truncation

我正在使用Java JDBC和MySQL,我收到了这个错误:

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

如何解决此错误?

10 个答案:

答案 0 :(得分:8)

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

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

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

答案 1 :(得分:6)

如何在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.

答案 2 :(得分:3)

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

答案 3 :(得分:1)

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

经过多次R&我找到了如下解决方案。

我在application.properties文件中添加了以下行并解析了

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

希望它对某人有帮助。

答案 4 :(得分:0)

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

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

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

答案 5 :(得分:0)

我在Spring Boot应用程序中上传一个  图片/ Word / PDF文件,并按以下步骤进行修复:

解决方案

  1. 请查看您要尝试的文件大小 上传。
  2. 然后将文件大小与允许的最大大小进行比较 您映射的数据库FIELD类型。
  3. 例如LOB的:
    TINYBLOB≈255字节,BLOB≈64KB,MEDIUMBLOB≈16MB和LONGBLOB≈4GB运行
  4. 根据您的空间要求使用Alter table命令:

    ALTER TABLE'TABLE_NAME'修改'FIELD_NAME'MEDIUMBLOB;

    注意:通常建议保存链接,但不要保存实际文件(文件较大 尺寸)。

答案 6 :(得分:0)

对于那些偶然发现这里的人,可能还有另一个类似错误的原因:

存储过程参数的类型可能是一个限制因素。

例如:您具有相应的列数据类型,并且以LONGTEXT形式发送到MySQL服务器的数据,而向其发送LONGTEXT数据的存储过程的参数可能具有TEXT类型。在这种情况下,您需要更新参数数据类型

答案 7 :(得分:0)

在 JPA 实体中使用带有长度的注释 @Column。这应该可以解决问题。

示例代码:

@Entity
public class SampleEntity{

    @Column(length = 1200)
    private String column_name;

    // ...

}

根据您的喜好设置长度,它会在表格中变成VARCHAR(length)。如果您提供更大的值,它将被创建为 longtext

尝试和测试 - 创建 sql 脚本如下所示:

CREATE TABLE `SampleEntity` (
  `id` bigint(20) NOT NULL,
  `dateCreated` datetime DEFAULT NULL,
  `dateModified` datetime DEFAULT NULL,
  `column_name` longtext,
  `userName` varchar(255) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

参考 - https://www.baeldung.com/jpa-size-length-column-differences

答案 8 :(得分:0)

我建议你使用 Spring Boot 和 Hibernate。我遇到了同样的问题,解决方案很明显:

    @Column(length = 65555)
    @NotNull
    private String content;

我也尝试了以下行,但不知何故没有显示任何效果:

@Size(min = 5, max = 65555)

我认为这可能是因为 MySQL 表大小有默认约束,如果输入的值不在定义的范围内,@Size 注释仅用于向用户反馈。 我希望这能解决您的问题!

答案 9 :(得分:-1)

在我们的例子中,只需重启应用程序即可解决问题,重启我的意思是重启 tomcat。如果此问题可能是由于其他原因而发生的任何想法,但错误是这样抛出的。