我使用jTDS 1.2.6连接Adaptive Server Enterprise / 15.7.0。
当预准备语句在具有VARCHAR(16)
列的表中插入行时,字符串将被静默截断。
插入成功,没有警告,并且没有引发DataTruncation
异常,而编码的字符串被截断为16个八位字节。
我怎样才能检测到字符串截断?
答案 0 :(得分:0)
除非设置string_rtruncation on
,否则Adaptive Server会将条目截断为指定的列长度而不会出现警告或错误。请参见“参考手册:命令”。
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");
}