0

我正在处理可能适合也可能不适合我们数据库的第三方用户数据。如果数据太长,则需要截断数据。

我们将 IBatis 与 Connector/J 一起使用。如果数据太长,则抛出 SQL 异常。我有两个选择:要么截断 Java 中的字符串,要么使用子字符串截断 sql 中的字符串。

我不喜欢截断 sql 中的字符串,因为我在 Ibatis XML 中编写表结构,但另一方面,SQL 知道我们的数据库排序规则(不一致并且要保持一致会很昂贵)并且可以截断以多字节安全的方式字符串。

有没有办法让 Connector/J 直接插入这个 SQL,如果没有,人们会推荐哪条路线?

4

1 回答 1

4

根据MySQL 文档,插入超过长度的数据可能会被视为警告:

将字符串插入到超过列的最大长度的字符串列(CHAR、VARCHAR、TEXT 或 BLOB)中。该值被截断为列的最大长度。

连接器/J 属性之一是jdbcCompliantTruncation. 这是它的描述

这设置了当数据被截断时,Connector/J 是否应该抛出 java.sql.DataTruncation 异常。当连接到支持警告的服务器(MySQL 4.1.0 和更新版本)时,这是 JDBC 规范所要求的。如果服务器 sql-mode 包含 STRICT_TRANS_TABLES,则此属性无效。请注意,如果 STRICT_TRANS_TABLES 未设置,它将作为使用此连接字符串选项的结果进行设置。

如果我理解正确,那么将此属性设置为 false 不会引发异常,而是会插入截断的数据。此解决方案不需要您截断程序代码或 SQL 语句中的数据,而是将其委托给数据库。

于 2010-09-01T20:19:36.200 回答