12

Java アプリケーションから、かなり単純なデータベースを使用しています。標準の JDBC mysql アダプターを使用して、一度に約 200k のテキストを挿入しようとしています。断続的にcom.mysql.jdbc.MysqlDataTruncation: Data truncation: Data too long for column error.

列のタイプはlongtextで、データベースの照合順序はUTF-8です。エラーは、MyISAMInnoDBテーブル エンジンの両方を使用して表示されます。最大パケット サイズは、クライアント側とサーバー側の両方で 1 GB に設定されているため、問題が発生することもありません。

4

5 に答える 5

10

UTF-8 データがすべて 3 バイト Unicode であることを確認してください。4 バイト文字 (Unicode および Java では合法、MySQL 5 では違法) がある場合、それらを挿入しようとするとこのエラーが発生する可能性があります。これは、MySQL 6.0で修正する必要がある問題です。

于 2008-09-16T15:11:31.967 に答える
5

データを切り捨ててとにかく挿入する INSERT IGNORE を実行することで、エラーを無視することができます。( http://dev.mysql.com/doc/refman/5.0/en/insert.htmlから)

IGNORE キーワードを使用すると、INSERT ステートメントの実行中に発生したエラーは代わりに警告として扱われます。たとえば、IGNORE を使用しない場合、テーブル内の既存の UNIQUE インデックスまたは PRIMARY KEY 値を複製する行は、重複キー エラーを引き起こし、ステートメントは中止されます。IGNORE を使用すると、行はまだ挿入されませんが、エラーは発行されません。IGNORE が指定されていない場合、エラーを引き起こす可能性のあるデータ変換はステートメントを中止します。IGNORE を使用すると、無効な値が最も近い値に調整されて挿入されます。警告は生成されますが、ステートメントは中止されません。

于 2008-09-16T14:52:41.357 に答える
4

mysqlでは、大きなテキストデータにMEDIUMTEXTまたはフィールドタイプを使用できますLONGTEXT

于 2012-10-16T12:02:06.453 に答える
2

列にあまりにも多くのバイトを入れようとしているように思えます。コードのバグが原因で、昨夜、MySQL で非常によく似たエラーに遭遇しました。するつもりだった

foo.status = 'inactive'

しかし、実際に入力した

foo.state = 'inactive'

foo.state は、米国の州 ( varchar(2) ) の 2 文字のコードであると想定されています。あなたと同じエラーが発生しました。コードで同様の状況を探しに行くかもしれません。

于 2008-09-16T14:55:20.883 に答える
1

私はこの問題にぶつかり、テキスト内の非標準のASCII文字をすべて削除することで解決しました(上記のUTF-8のアドバイスに従いました)。

Debian 4、Java 5 システムで問題が発生しました。しかし、同じコードは Ubuntu 9.04、Java 6 で問題なく動作しました。どちらも MySql 5 を実行します。

于 2009-07-10T16:06:22.593 に答える