我正在处理可能适合或不适合我们数据库的第三方用户数据。如果数据太长,则需要截断数据。
我们正在使用带有Connector / J的IBatis。如果数据太长,则抛出SQL异常。我有两个选择:在Java中截断字符串或使用substring截断sql中的字符串。
我不喜欢在sql中截断字符串,因为我在Ibatis XML中编写表结构,但另一方面SQL知道我们的数据库整理(这是不一致的,并且使得一致性很昂贵)并且可以以多字节安全的方式截断字符串。
有没有办法让Connector / J直接插入这个SQL,如果不是人们推荐哪条路径?
答案 0 :(得分:3)
根据the MySQL documentation,插入超过长度的数据可能会被视为警告:
将字符串插入字符串 列(CHAR,VARCHAR,TEXT或BLOB) 超过列的最大值 长度。该值被截断为 列的最大长度。
其中一个Connector / J属性是jdbcCompliantTruncation
。这是its description:
设置Connector / J是否应该 throw java.sql.DataTruncation 数据被截断时的异常。 这是JDBC所必需的 连接到a时的规范 支持警告的服务器(MySQL 4.1.0和更新版)。如果服务器sql-mode包含,则此属性无效 STRICT_TRANS_TABLES。请注意,如果 它没有设置STRICT_TRANS_TABLES 将使用此设置的结果 连接字符串选项。
如果我理解正确,那么将此属性设置为false不会抛出异常但会插入截断的数据。此解决方案不要求您截断程序代码或SQL语句中的数据,而是将其委托给数据库。