したがって、テーブル スキーマは次のようになります。
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 は一意性をチェックしていますが、整数としてですか?
誰かが似たようなことに遭遇しましたか?ありがとう