MySQL の列エラーでデータが切り捨てられる問題を修正
この記事では、MySQL で列のデータが切り捨てられました
というエラーの考えられる理由と解決策を示します。
MySQL の Data is Truncated for a Column
エラーを修正
ここでは、MySQL data is truncated for a column
というエラーを取り除くために考えられる理由と解決策を探ります。
データが大きすぎる
MySQL テーブルに手動で挿入する代わりに、ファイルからデータをロードする必要があるシナリオがいくつかあります。 読み込み中に、行 # の列 'columnName' のデータが切り捨てられました
というエラーが発生する場合があります。 なぜ?
これは、指定されたデータが MySQL テーブルの列のデータ型に対して大きすぎるように思われるためです。 たとえば、value
属性が text
型であるテーブルがあり、提供されたデータの 65K 文字しか収容できないとします。
value
列に 65K を超えるデータを挿入すると、このエラーが発生します。
この問題を解決するには、16MB と 4GB を収容できる MEDIUMTEXT
や LONGTEXT
など、より多くのデータを受け入れることができるタイプに変更する必要があります。 こちら で最適化のヒントを見つけることもできます。
列のデータ型の最大長を考慮して、SET ANSI_WARNINGS OFF
を使用してデータを切り捨て、レコードを再度挿入することもできます。
無効なデータが渡される
無効なデータを挿入しようとすると、エラー コード: 1265。行 1 の列 'a' のデータが切り捨てられました
も MySQL で発生します。
たとえば、price
フィールドが float
型で、NULL
値を受け入れるテーブルがあるとします。 以下を参照してください。
#create a table named `prices`
CREATE TABLE prices (ID INT NOT NULL, price FLOAT NULL);
#insert the first record
INSERT prices VALUES (1, '');
ここでは、price
列に、NULL
値を取る float
型の空の文字列を挿入します。 NULL
と ''
は同じものではないことに注意してください。
それでも、NULL
値を取る列に空の文字列を挿入しようとすると、Error Code: 1265. Data truncated for column 'a' at row 1
が生成されます。 この問題の最も簡単な解決策は、price
テーブルのそれぞれの列で必要とされる正しいデータ型の正しい値を渡すことです。
空の文字列 (''
) の代わりに NULL
値を明示的に指定するか、INSERT
ステートメントでその特定の列の値を書き込まないことで解決できます。 この例を考慮して、次のスニペットを参照してください。
INSERT prices VALUES (1, NULL); #insert null explicitly
INSERT prices (ID) VALUES (2); #don't specify values for `price` column
不適切な終了文字
すべての行を手動で MySQL テーブルに挿入すると、すべてうまくいきます。 一度に複数の行を読み込もうとして終了文字を適切に取得できないと、エラーが発生します。
これを解決するには、ファイルの終端文字を確認し、LOAD
コマンドで次のように指定する必要があります。
#if the terminating character is `tab`
FIELDS TERMINATED BY '\t'
#if the terminating character is a `comma`
FIELDS TERMINATED BY ','