1

得到这个例外:

Exception: Data truncation: Data too long for column 'subject' at row 1

此数据用于显示目的,因此可以截断。

最简单的做法是在逻辑中截断subject = subject.subString(0, 100)- 但这会将 MySQL 中的最大长度复制到我在 Java 中硬编码的数字。MySQL 或 JDBC 中是否有任何功能会自动截断以适应?

4

3 回答 3

1

如果未启用严格 SQL 模式并且您为 CHAR 或 VARCHAR 列分配的值超过了列的最大长度,则该值将被截断以适应并生成警告。

(来自CHAR 和 VARCHAR 类型

如果您不介意将 MySQL 服务器模式更改为不严格,则不会引发异常。

请参阅服务器模式

于 2012-05-17T16:17:06.383 回答
0

插入截断是一个异常,驱动程序需要抛出异常(DataTruncation);请参阅 JDBC 4.1 的第 8.3 节:

当写入数据源时发生数据截断时,会引发 DataTruncation 对象。即使已生成警告,已截断的数据值也可能已写入数据源。当从数据源读取数据时发生数据截断时,将报告 SQLWarning。

还有静默截断(setMaxFieldSize()在 Statement 上使用,但 Javadoc 只讨论 ResultSet 中的字段,因此不清楚这是否也适用于 PreparedStatement 上设置的参数。

于 2012-05-18T20:03:06.400 回答
0

使用定义宽度的列属性,而不是硬编码 100。您并不真正关心它在数据库中的长度,只是它不会根据您的客户端长度定义而爆炸。

于 2012-05-17T16:11:19.430 回答