我使用 jTDS 1.2.6 连接 Adaptive Server Enterprise/15.7.0。当准备好的语句在具有VARCHAR(16)
列的表中插入行时,字符串会被静默截断。插入成功,没有警告,也没有DataTruncation
引发异常,而编码的字符串被截断为 16 个八位字节。
我怎样才能检测到字符串截断?
Adaptive Server 将条目截断为指定的列长度,不会发出警告或错误,除非您设置string_rtruncation on
. 请参阅参考手册:命令。
MSSQL 总是检测字符串的截断并且选项 STRING_RTRUNCATION 不存在。这是 jTDS SAfeTest.testDataTruncException() 的摘录
Statement stmt = con.createStatement();
if (!con.getMetaData().getDatabaseProductName().toLowerCase().startsWith("microsoft")) {
// By default Sybase will silently truncate strings,
// set an option to ensure that an exception is thrown.
stmt.execute("SET STRING_RTRUNCATION ON");
}