Как обнаружить обрезание строки
Я использую jTDS 1.2.6 для подключения Adaptive Server Enterprise/15.7.0. Когда подготовленный оператор вставляет строки в таблицу с VARCHAR(16)
столбец, строки молча усечены. Вставка прошла успешно, предупреждений нет и нет DataTruncation
Возникает исключение, тогда как закодированная строка усекается до 16 октетов.
Как я могу обнаружить усечение строки?
1 ответ
Решение
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");
}