我正在使用Java JDBC和MySQL,我收到了这个错误:
com.mysql.jdbc.MysqlDataTruncation: Data truncation:
Data too long for column 'column_name'
如何解决此错误?
答案 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文件,并按以下步骤进行修复:
解决方案
根据您的空间要求使用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。如果此问题可能是由于其他原因而发生的任何想法,但错误是这样抛出的。