0

私は、私たちのデータベースに収まるかどうかわからないサードパーティのユーザー データを扱っています。データが長すぎる場合は、切り捨てる必要があります。

Connector/JでIBatisを使用しています。データが長すぎる場合、SQL 例外がスローされます。Java で文字列を切り捨てるか、部分文字列を使用して SQL で文字列を切り捨てるという 2 つの選択肢がありました。

Ibatis XML でテーブル構造を書いているので、SQL で文字列を切り捨てるのは好きではありませんが、一方で SQL はデータベースの照合 (一貫性がなく、一貫性を保つにはコストがかかる) を認識しており、切り捨てることができます。文字列をマルチバイトセーフな方法で。

Connector/J にこの SQL を直接挿入させる方法はありますか? そうでない場合、どのルートを推奨しますか?

4

1 に答える 1

4

MySQL のドキュメントによると、長さを超えるデータを挿入すると、警告として扱われる可能性があります。

列の最大長を超える文字列列 (CHAR、VARCHAR、TEXT、または BLOB) への文字列の挿入。値は列の最大長に切り捨てられます。

Connector/J プロパティの 1 つに がありjdbcCompliantTruncationます。これはその説明です:

これは、データが切り捨てられたときに Connector/J が java.sql.DataTruncation 例外をスローするかどうかを設定します。これは、警告をサポートするサーバー (MySQL 4.1.0 以降) に接続するときに、JDBC 仕様で必要とされます。サーバーの sql-mode に STRICT_TRANS_TABLES が含まれている場合、このプロパティは効果がありません。STRICT_TRANS_TABLES が設定されていない場合は、この接続文字列オプションを使用した結果として設定されることに注意してください。

私が正しく理解していれば、このプロパティを false に設定しても例外はスローされず、切り捨てられたデータが挿入されます。このソリューションでは、プログラム コードまたは SQL ステートメントでデータを切り捨てる必要はありませんが、データをデータベースに委任します。

于 2010-09-01T20:19:36.200 に答える