12

我正在使用来自 Java 应用程序的相当简单的数据库。我们尝试使用标准的 JDBC mysql 适配器一次插入大约 200k 的文本。我们间歇性地得到一个com.mysql.jdbc.MysqlDataTruncation: Data truncation: Data too long for column error.

列类型是longtext,数据库排序规则是UTF-8。错误显示同时使用MyISAMInnoDB表引擎。客户端和服务器端的最大数据包大小都设置为 1 GB,因此这也不应该引起问题。

4

5 回答 5

10

检查您的 UTF-8 数据是否都是 3 字节的 Unicode。如果你有 4 字节字符(在 Unicode 和 Java 中是合法的,在 MySQL 5 中是非法的),当你尝试插入它们时它会抛出这个错误。这是一个应该在 MySQL 6.0 中修复的问题。

于 2008-09-16T15:11:31.967 回答
5

好吧,您可以通过执行 INSERT IGNORE 让它忽略错误,这只会截断数据并插入它。(来自http://dev.mysql.com/doc/refman/5.0/en/insert.html

如果使用 IGNORE 关键字,则执行 INSERT 语句时发生的错误将被视为警告。例如,如果没有 IGNORE,复制表中现有 UNIQUE 索引或 PRIMARY KEY 值的行会导致重复键错误并且语句被中止。使用 IGNORE,行仍然没有插入,但不会发出错误。如果未指定 IGNORE,将触发错误的数据转换将中止语句。使用 IGNORE,将无效值调整为最接近的值并插入;会产生警告,但语句不会中止。

于 2008-09-16T14:52:41.357 回答
4

在 mysql 中,您可以对大文本数据使用MEDIUMTEXT或字段类型LONGTEXT

于 2012-10-16T12:02:06.453 回答
2

It sounds to me like you are trying to put too many bytes into a column. I ran across a very similar error with MySQL last night due to a bug in my code. I meant to do

foo.status = 'inactive'

but had actually typed

foo.state = 'inactive'

Where foo.state is supposed to be a two character code for a US State ( varchar(2) ). I got the same error as you. You might go look for a similar situation in your code.

于 2008-09-16T14:55:20.883 回答
1

我刚刚遇到了这个问题,并通过删除文本中的所有非标准 ascii 字符来解决它(遵循上面的 UTF-8 建议)。

我在 Debian 4、Java 5 系统上遇到了问题;但相同的代码在 Ubuntu 9.04、Java 6 上运行良好。两者都运行 MySql 5。

于 2009-07-10T16:06:22.593 回答