MySQLのエラー『Incorrect Integer Value』の解決方法

MySQLのエラー『Incorrect Integer Value』の解決方法

『Incorrect Integer Value』エラーは、整数型(INT, BIGINT など)のカラムに不正な値を挿入しようとした場合に発生します。このエラーはMySQLのSTRICTモードが有効になっている場合によく発生します。この記事では、エラーの発生条件と具体的な解決策について説明します。

1. エラーの発生条件

このエラーは以下のような場合に発生します。

  • 整数型カラムに文字列を挿入しようとした。
  • NULL制約のある整数型カラムに空文字(”)を挿入しようとした。
  • STRICTモードが有効な状態で、不正な値を挿入した。

エラーメッセージの例:

ERROR 1366 (HY000): Incorrect integer value: '' for column 'age' at row 1

2. カラムのデータ型を確認する

テーブルの構造を確認し、整数型のカラムを特定する。

SHOW CREATE TABLE my_table;

または、カラムのデータ型を個別に確認する。

DESCRIBE my_table;

3. INSERT時の値を確認する

INSERT時に、不正な値が指定されていないかをチェックする。

INSERT INTO my_table (id, age) VALUES (1, '');

空文字(”)は整数型のカラムには無効なため、NULLを指定するかデフォルト値を設定する必要がある。

INSERT INTO my_table (id, age) VALUES (1, NULL);

4. STRICTモードの確認と変更

STRICTモードが有効だと厳格なチェックが行われるため、無効化することでエラーを回避できる。

現在の設定を確認する:

SELECT @@sql_mode;

STRICTモードを一時的に無効化する:

SET SESSION sql_mode = '';

永続的に無効化するには、my.cnf に以下を設定する:

[mysqld]
sql_mode=""

5. 文字列を整数に変換する

文字列として渡された値を整数に変換することでエラーを防ぐ。

INSERT INTO my_table (id, age) VALUES (1, CAST('25' AS UNSIGNED));

6. デフォルト値を設定する

NULLや空文字が挿入される可能性がある場合、デフォルト値を設定することでエラーを回避できる。

ALTER TABLE my_table MODIFY age INT DEFAULT 0;

7. 入力データを検証する

アプリケーションレベルで、整数型カラムに適切なデータが渡されるようにバリデーションを行う。

PHPの例:

ERROR 1366 (HY000): Incorrect integer value: '' for column 'age' at row 1

8. NULLを許可する

NULL値を許可することで、空文字が渡された場合でもエラーにならないようにできる。

SHOW CREATE TABLE my_table;

9. 空文字を0に変換する

もし空文字が問題になっている場合は、データ挿入時に0に変換する。

INSERT INTO my_table (id, age) VALUES (1, IF(''='', 0, ''));

10. ENUM型への変更を検討する

特定の数値しか許容しない場合、整数型ではなくENUM型を使用するのも選択肢の一つ。

ALTER TABLE my_table MODIFY age ENUM('18', '19', '20') DEFAULT '18';