0

jTDS1.2.6を使用してAdaptiveServerEnterprise/15.7.0に接続します。プリペアドステートメントが列のあるテーブルに行を挿入するとVARCHAR(16)、文字列はサイレントに切り捨てられます。挿入は成功し、警告もDataTruncation例外も発生しませんが、エンコードされた文字列は16オクテットに切り捨てられます。

文字列の切り捨てをどのように検出できますか?

4

1 に答える 1

0

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");
}
于 2012-12-17T12:38:41.897 に答える