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';
-
前の記事
PostgreSQLでの『ERROR: duplicate key value violates unique constraint』を解決する方法 2025.06.02
-
次の記事
Railsのエラー『ActiveRecord::DangerousAttributeError』の解決方法 2025.06.02
コメントを書く