我正在使用第三方用户数据,这些数据可能适合也可能不适合我们的数据库。如果数据太长,则需要截断。
我们正在使用带有连接器/J的IBatis。如果数据太长,将抛出SQL异常。我有两个选择:要么截断Java中的字符串,要么使用substring截断sql中的字符串。
我不喜欢截断sql中的字符串,因为我是在Ibatis XML中编写表结构,但是SQL另一方面知道我们的数据库排序规则(这是不一致的,保持一致的代价很高),并且可以以多字节安全的方式截断字符串。
有没有办法让Connector/J直接插入这个SQL,如果没有,人们会推荐哪条路线?
发布于 2010-09-02 04:19:36
根据the MySQL documentation的说法,插入超过长度的数据可能会被视为警告:
将字符串插入超过列最大长度的字符串列(CHAR、VARCHAR、TEXT或BLOB)。该值被截断为列的最大长度。
连接器/J属性之一是jdbcCompliantTruncation。这是its description
此选项设置当数据被截断时连接器/J是否应抛出java.sql.DataTruncation异常。当连接到支持警告的服务器(MySQL 4.1.0和更高版本)时,这是JDBC规范所要求的。如果服务器sql-mode包含STRICT_TRANS_TABLES,则此属性不起作用。请注意,如果未设置STRICT_TRANS_TABLES,则它将作为使用此连接字符串选项的结果进行设置。
如果我理解正确的话,那么将这个属性设置为false并不会抛出异常,而是插入截断的数据。此解决方案不需要截断程序代码或SQL语句中的数据,而是将其委托给数据库。
https://stackoverflow.com/questions/3621627
复制相似问题