Java com.mysql.jdbc.MysqlDataTruncation:数据截断:数据对于列';列名称';
我将Java JDBC与MySQL一起使用,出现以下错误:Java com.mysql.jdbc.MysqlDataTruncation:数据截断:数据对于列';列名称';,java,mysql,truncation,Java,Mysql,Truncation,我将Java JDBC与MySQL一起使用,出现以下错误: com.mysql.jdbc.MysqlDataTruncation: Data truncation: Data too long for column 'column_name' ALTER TABLE table_name CHANGE COLUMN col_name col_name VARCHAR(1000); //assuming 1000 is enough 如何纠正此错误?这似乎很明显,事实确实如此。显然,您试
com.mysql.jdbc.MysqlDataTruncation: Data truncation:
Data too long for column 'column_name'
ALTER TABLE table_name CHANGE COLUMN col_name col_name VARCHAR(1000); //assuming 1000 is enough
如何纠正此错误?这似乎很明显,事实确实如此。显然,您试图插入或更新一行,该行的“column_name”列的值大于该列的值
ALTER TABLE table_name CHANGE COLUMN col_name col_name VARCHAR(1000); //assuming 1000 is enough
例如,如果它是CHAR或VARCHAR,则可能有一个字符串比定义的列大小长
ALTER TABLE table_name CHANGE COLUMN col_name col_name VARCHAR(1000); //assuming 1000 is enough
解决这个问题的选择也有些明显——要么确保存储的数据不大于列(可能在存储之前截断较长的字符串),要么增加数据库列的大小。在我的例子中,上载的数据包含引号('and')。这就是为什么我会遇到与您上面提到的相同的异常。在删除成功插入到表中的数据中的引号后。如何在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)
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.
ALTER TABLE table_name CHANGE COLUMN col_name col_name VARCHAR(1000); //assuming 1000 is enough
这是您得到的错误,但是在MySQL终端中,它显示为警告,仍然插入您的行,只是默默地截断它
ALTER TABLE table_name CHANGE COLUMN col_name col_name VARCHAR(1000); //assuming 1000 is enough
MySQL JDBC没有那么宽容,它抛出了一个硬错误,并且不会插入行
ALTER TABLE table_name CHANGE COLUMN col_name col_name VARCHAR(1000); //assuming 1000 is enough
2个解决方案
ALTER TABLE table_name CHANGE COLUMN col_name col_name VARCHAR(1000); //assuming 1000 is enough
增加要插入的数据类型的容量,或者减小要放入其中的内容的大小
ALTER TABLE table_name CHANGE COLUMN col_name col_name VARCHAR(1000); //assuming 1000 is enough
增加列大小的图例:
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)
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.
ALTER TABLE table_name CHANGE COLUMN col_name col_name VARCHAR(1000); //assuming 1000 is enough
我在SpringBootDataJPA应用程序中遇到了同样的问题,当时我打算将图像文件作为字节插入数据库,因为它给了我同样的错误
ALTER TABLE table_name CHANGE COLUMN col_name col_name VARCHAR(1000); //assuming 1000 is enough
经过多次研发,我找到了如下解决方案
ALTER TABLE table_name CHANGE COLUMN col_name col_name VARCHAR(1000); //assuming 1000 is enough
我在application.properties文件中添加了以下行,并解决了这个问题
spring.datasource.url=jdbc:mysql://localhost:3306/conweb?sessionVariables=sql_mode='NO_ENGINE_SUBSTITUTION'&jdbcCompliantTruncation=false
ALTER TABLE table_name CHANGE COLUMN col_name col_name VARCHAR(1000); //assuming 1000 is enough
希望对其他人有所帮助。出现此错误是因为您试图插入到列中的数据太大
ALTER TABLE table_name CHANGE COLUMN col_name col_name VARCHAR(1000); //assuming 1000 is enough
解决方案-将列大小更改为max。假设您的列是VARCHAR类型,则在mySQL中
ALTER TABLE table_name CHANGE COLUMN col_name col_name VARCHAR(1000); //assuming 1000 is enough
在我的Spring Boot应用程序中,我在上载 Image/Word/PDF文件,并通过以下步骤修复它:
ALTER TABLE table_name CHANGE COLUMN col_name col_name VARCHAR(1000); //assuming 1000 is enough
解决方案
ALTER TABLE table_name CHANGE COLUMN col_name col_name VARCHAR(1000); //assuming 1000 is enough
TINYBLOB≈ 255字节,BLOB≈ 64KB,中绿叶≈ 16MB和LONGBLOB≈ 4GB运行
ALTER TABLE table_name CHANGE COLUMN col_name col_name VARCHAR(1000); //assuming 1000 is enough
更改表格“表格名称”修改“字段名称”MEDIUMBLOB
ALTER TABLE table_name CHANGE COLUMN col_name col_name VARCHAR(1000); //assuming 1000 is enough
注意:始终建议保存链接,但不要保存实际文件(具有较大的
大小)以DB为单位ALTER TABLE table_name CHANGE COLUMN col_name col_name VARCHAR(1000); //assuming 1000 is enough
对于那些在这里偶然发现类似错误的人,可能还有另一个原因:
ALTER TABLE table_name CHANGE COLUMN col_name col_name VARCHAR(1000); //assuming 1000 is enough
存储过程参数的类型可能是一个限制因素。
ALTER TABLE table_name CHANGE COLUMN col_name col_name VARCHAR(1000); //assuming 1000 is enough
例如:您有相应的列数据类型,并且数据作为LONGTEXT发送到MySQL服务器,而您要向其发送LONGTEXT数据的存储过程的参数可能有TEXT类型。在这种情况下,您需要更新参数数据类型。在我们的情况下,只需重新启动应用程序就可以通过重新启动I me解决问题一个重新启动的tomcat。如果这个问题是由于其他原因引起的,你有什么想法吗?但是错误是这样抛出的。在JPA实体中,使用长度为的annotation@Column。这应该可以解决问题
ALTER TABLE table_name CHANGE COLUMN col_name col_name VARCHAR(1000); //assuming 1000 is enough
示例代码:
ALTER TABLE table_name CHANGE COLUMN col_name col_name VARCHAR(1000); //assuming 1000 is enough
@Entity
public class SampleEntity{
@Column(length = 1200)
private String column_name;
// ...
}
根据您的偏好设置长度,它将成为表中的VARCHAR(length)。如果您给出更大的值,它将被创建为longtext
ALTER TABLE table_name CHANGE COLUMN col_name col_name VARCHAR(1000); //assuming 1000 is enough
经过尝试和测试-创建sql脚本如下所示:
ALTER TABLE table_name CHANGE COLUMN col_name col_name VARCHAR(1000); //assuming 1000 is enough
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;
参考-我建议您使用Spring Boot和Hibernate。我遇到了同样的问题,解决方案非常明显:
ALTER TABLE table_name CHANGE COLUMN col_name col_name VARCHAR(1000); //assuming 1000 is enough
@Column(length = 65555)
@NotNull
private String content;
我也试过下面这句话,但不知怎么的,没有显示出任何效果:
ALTER TABLE table_name CHANGE COLUMN col_name col_name VARCHAR(1000); //assuming 1000 is enough
@Size(min = 5, max = 65555)
我认为这可能是因为MySQL表大小有默认约束,如果输入的值不在定义的范围内,@Size
注释只用于向用户反馈。
我希望这能解决您的问题!如果它是一个文本字段怎么办?或者,正如其他人所指出的,在jdbc连接字符串中使用jdbcomplianttrunation=false。将VARCHAR更改为text也会有帮助。我正在尝试将java.uitl.map转换为字符串化的json字符串并尝试将其持久化。我遇到了上述错误,如果是由于引号ma引起的那么我不能用你的答案了——那么我们可以用一个转义字符吗?谢谢,这很有帮助
ALTER TABLE table_name CHANGE COLUMN col_name col_name VARCHAR(1000); //assuming 1000 is enough