1

したがって、テーブル スキーマは次のようになります。

field - type - index

'id' - INT - PRI
'event_id' - BIGINT(20) - UNI
co1 ... colN (no indexes)

LOAD DATA コマンド:

LOAD DATA LOCAL INFILE 'my-file' REPLACE INTO TABLE mydb.mytable (event_id, col1 .. colN)

エラーが発生します:

ERROR 1062 (23000) at line 1: Duplicate entry '2147483647' for key 1

「キー 1」は、「event_id」の一意のキーを指します。

その他のコンテキスト: (1) LOAD DATA の時点でテーブルは空です。(2) ソースファイルで 2147483647 を grep すると、何も得られません (3) 2147483647 は整数の最大値です (4) 実際には 'id' に値を挿入していません - 自動インクリメントのみです (5) 使用していますLOAD DATA の 'REPLACE' キーワードであるため、重複があったとしても、それらを処理する方法を知っている必要がありますか?

これは、いくつかの int オーバーフローの問題を示唆しており (つまり、ソース データまたはテーブルに本物の重複があるとは思わない)、実際、'event_id' の 'my​​-file' の値は整数の最大制限を超えています。 . ただし、'event_id' 列が BIGINT であるため、エラーは奇妙です。

一時的な修正として、「event_id」に一意のインデックスを削除すると、LOAD DATA コマンドが機能しました。「event_id」の値はすべて正常で、切り捨てなどはありませんでした。したがって、値を処理するテーブルに問題はありませんが、どういうわけか LOAD DATA は一意性をチェックしていますが、整数としてですか?

誰かが似たようなことに遭遇しましたか?ありがとう

4

2 に答える 2

0

これが意味することは、「2147483647」がそのデータベースのキーとしてマークされたフィールドに既に存在するということです。そのフィールドからキーを削除するだけで問題ありません。

編集:あなたの質問で述べたように、event_id は主キーです。主キーに同じ値を 2 回持つことはできません。

頑張ってください!

于 2012-05-24T19:14:18.633 に答える
0

問題はデータ型ではなく、

問題は、2 つのフィールドしかなく、1 つは PK で、もう 1 つは UNIQUE であるため、値を繰り返すことはできません。データを挿入またはロードすると、この値「2147483647」のエントリが 2 回追加されようとします。これを修正するにはいくつかの方法があります。

  • 最初のものはテキスト エディターでファイルを開こうとし、繰り返される値を見つけて修正します。うまくいかない場合は、mysqldump または phpmyadmin を使用してデータをエクスポートし、テキスト エディターでファイルを編集します。

  • 問題が解決しない場合は、他の方法 (mysqldum または phpmyadmin) でデータをエクスポートし、再度インポートしてみてください。

  • 主キーなしでテーブルを再作成してみてください。これを使用できます

    テーブル big_int_test を作成します (テーブル 1 から * を選択); そして、PK、INDEXES、および FK なしでテーブルのコピーを作成します。

  • インデックスとUNIQUEキーの制約を削除し、データをインポートし、テーブルを修正し(繰り返される値を削除します)、PKとUNIQUE KEYを再作成できます(これは一種のクレイジーですが、うまくいく可能性があります)

于 2012-05-24T19:26:22.007 に答える