截断字符串

时间:2010-09-01 19:50:07

标签: java sql ibatis mysql-connector

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

我们正在使用带有Connector / J的IBatis。如果数据太长,则抛出SQL异常。我有两个选择:在Java中截断字符串或​​使用substring截断sql中的字符串。

我不喜欢在sql中截断字符串,因为我在Ibatis XML中编写表结构,但另一方面SQL知道我们的数据库整理(这是不一致的,并且使得一致性很昂贵)并且可以以多字节安全的方式截断字符串。

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

1 个答案:

答案 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语句中的数据,而是将其委托给数据库。