jTDS1.2.6を使用してAdaptiveServerEnterprise/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");
}