1

この例外があります:

Exception: Data truncation: Data too long for column 'subject' at row 1

このデータは表示用であるため、切り捨てても問題ありません。

簡単にできることは、ロジックで切り捨てることですがsubject = subject.subString(0, 100)、これにより、MySQL の最大長が Java でハードコーディングした数に複製されます。MySQL または JDBC (問題がある場合は c3p0 を使用しています) に、自動的に切り捨てられる機能はありますか?

4

3 に答える 3

1

厳密なSQLモードが有効になっておらず、列の最大長を超える値をCHAR列またはVARCHAR列に割り当てると、値が切り捨てられて警告が生成されます。

CHARおよびVARCHARタイプから)

MySQLサーバーモードを厳密でないように変更してもかまわない場合は、例外はスローされません。

サーバーモードを参照してください

于 2012-05-17T16:17:06.383 に答える
0

挿入時の切り捨ては例外であり、ドライバーは例外をスローする必要があります ( DataTruncation)。JDBC 4.1 のセクション 8.3 を参照してください。

データ ソースへの書き込みでデータの切り捨てが発生すると、DataTruncation オブジェクトがスローされます。切り捨てられたデータ値は、警告が生成された場合でも、データ ソースに書き込まれている可能性があります。データ ソースからの読み取りでデータの切り捨てが発生すると、SQLWarning が報告されます。

サイレント トランケーションもあります ( setMaxFieldSize()Statement で使用しますが、Javadoc は ResultSet のフィールドについてのみ説明しているため、PreparedStatement で設定されたパラメーターにも適用する必要があるかどうかは不明です。

于 2012-05-18T20:03:06.400 に答える
0

100 をハード コーディングする代わりに、幅を定義する column プロパティを使用します。クライアント側の長さの定義に基づいて爆発しないだけで、データベース内の長さは気にしません。

于 2012-05-17T16:11:19.430 に答える