ERROR 1366 (HY000): Incorrect integer value: '' for column 'qty' at row 1 は、整数の列に、整数として読めない値(ここでは空文字 '')を入れようとしたときのエラーです。 CSV の取り込みや、画面の入力欄が空のまま送られたときによく起きます。

空文字は「値が無い」ではなく、「文字数 0 の文字列」です。 値が無いことを表すなら NULL を入れます。

INSERT INTO i87 (qty) VALUES ('');               -- ERROR 1366
INSERT INTO i87 (qty) VALUES (NULLIF('', ''));   -- NULL が入る

確認環境:MySQL 8.0.46(既定の sql_mode に STRICT_TRANS_TABLES)、PyMySQL(確認日 2026年10月11日)。

本記事の内容は、ご自由にお使いください。
ご利用の際は、出典として本ページへのリンクを記載いただけますようお願いします。

(記載例)出典:株式会社RJC「MySQL 1366 Incorrect integer valueの直し方」

どの値で、どうなるか

整数の列(qty int)と金額の列(price decimal(10,2))に、いろいろな文字列を入れました。

入れた値 結果(strict モード)
''(空文字) 1366 Incorrect integer value: ''
'abc' 1366
'123'(全角数字) 1366
'1,000'(カンマ付き) 1265 Data truncated for column 'qty'
'12abc' 1265 Data truncated
' 12 '(前後に空白) 入った(12)
'12.6' 入った(13 に四捨五入)
'1e3' 入った(1000)
price に '' 1366 Incorrect decimal value: ''
price に '¥1,000' 1366 Incorrect decimal value

全角数字は数値として読まれず、エラーになりました。 一方、'12.6' はエラーにならずに 13 に丸められ、'1e3' は 1000 として入りました。エラーにならない変換もあるので、入れる前に値を整えるのが確実です。全角数字を半角にする方法は、関連記事の「全角⇔半角変換の早見表|Java・JS・Python・Excel・SQL」で扱っています。

危険:strict モードを外すと、黙って別の値が入る

エラーを消すために sql_mode から STRICT を外すと、次のように入りました。

SET SESSION sql_mode = '';
INSERT INTO i87 (qty) VALUES (''), ('abc'), ('1,000');
入れた値 実際に入った値 警告
'' 0 1366
'abc' 0 1366
'1,000' 1 1265

「1,000 個」が「1 個」として、エラーにならずに保存されました。 空欄は「数量 0」になり、未入力と区別できなくなります。公式マニュアルでも、strict モードでないときは不正な値を調整して入れ、警告だけを出すとされています。sql_mode を緩めるのではなく、入れる値を直します。

直し方:SQL で変換する

変換 書き方
空文字を NULL に NULLIF(値, '')
カンマを除く REPLACE(値, ',', '')
両方 NULLIF(REPLACE(値, ',', ''), '')
前後の空白を除いてから判定 NULLIF(TRIM(値), '')
INSERT INTO i87 (qty) VALUES (NULLIF('', ''));           -- NULL
INSERT INTO i87 (qty) VALUES (REPLACE('1,000', ',', ''));  -- 1000

LOAD DATA(CSV の取り込み)

code,qty,price
A01,10,100.00
A02,,200.00          ← 数量が空
A03,"1,000",         ← カンマ付き、金額が空
LOAD DATA INFILE '/var/lib/mysql-files/i87.csv' INTO TABLE l87
FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"' IGNORE 1 LINES;
ERROR 1366 (HY000): Incorrect integer value: '' for column 'qty' at row 2

2行目の空欄でエラーになり、1行目も含めて1行も入りませんでした。 列をいったん @変数 で受け取り、SET で変換してから入れます(公式マニュアルの方法)。

LOAD DATA INFILE '/var/lib/mysql-files/i87.csv' INTO TABLE l87
FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"' IGNORE 1 LINES
(code, @qty, @price)
SET qty   = NULLIF(REPLACE(@qty, ',', ''), ''),
    price = NULLIF(@price, '');
code  qty   price
A01   10    100.00
A02   NULL  200.00
A03   1000  NULL

空欄は NULL、"1,000" は 1000 として入りました。 LOAD DATA の基本や、ファイルの置き場所(secure-file-priv)のエラーは、既存の記事「MySQL CSVインポート|LOAD DATA INFILEとエラー解決」で扱っています。

アプリから入れるとき

cur.execute('INSERT INTO i87 (qty) VALUES (%s)', ('',))     # DataError (1366, "Incorrect integer value: '' ...")
cur.execute('INSERT INTO i87 (qty) VALUES (%s)', (None,))   # 入る(NULL)

画面の入力欄が空のとき、空文字のまま DB に渡すと 1366 になりました。 アプリの側で、空なら None(NULL)、そうでなければ整数に変換してから渡します。

qty = int(text) if text.strip() else None

Java なら、setString("") ではなく、空なら setNull(1, Types.INTEGER)、そうでなければ setInt を使います(確認環境の MariaDB Connector/J でも、setString("") はエラーコード 1366、setNull は入りました)。

確認の手順(チェックリスト)

順番 確認すること 方法
1 どの値か エラー文の '...'(空文字・全角・記号)
2 どの列・何行目か for column '...' at row N
3 空文字なら NULLIF(値, '')、アプリでは None・setNull
4 カンマ・円記号 REPLACE で除く
5 CSV の取り込み @変数 と SET で変換
6 sql_mode を緩めていないか 緩めると 0 や 1 が黙って入る

よくある質問

Q. 列を NOT NULL にしていると、NULL も入りません。 A. NOT NULL の列に NULL を入れると、別のエラー(1048 Column cannot be null)になります。空欄を許すなら列を NULL 可にするか、業務として決めた既定値(DEFAULT 0 など)を使います。ただし、0 と未入力を区別したいなら NULL 可にします。

Q. PostgreSQL では同じ場合どうなりますか。 A. PostgreSQL は、空文字を整数の列に入れると invalid input syntax for type integer: "" というエラーになります。関連記事の「PostgreSQL invalid input syntaxの直し方」で扱っています。

まとめ

  • 整数・小数の列に、数値として読めない値を入れたエラー。多くは 空文字
  • 空文字は値が無いことではない。NULLIF(値, '') で NULL にする
  • 全角数字は 1366、カンマ付きは 1265。'12.6' は 13、'1e3' は 1000 として黙って入る
  • strict を外すと、'1,000' が 1、空欄が 0 として保存される
  • CSV は @変数 と SET で変換してから入れる
  • アプリでは、空なら None・setNull を渡す

参考・出典

確認日はいずれも 2026年10月11日です。

  • MySQL 8.0 Reference Manual「Server SQL Modes」:https://dev.mysql.com/doc/refman/8.0/en/sql-mode.html
  • MySQL 8.0 Reference Manual「LOAD DATA Statement」:https://dev.mysql.com/doc/refman/8.0/en/load-data.html

本記事の内容は、ご自由にお使いください。
ご利用の際は、出典として本ページへのリンクを記載いただけますようお願いします。

(記載例)出典:株式会社RJC「MySQL 1366 Incorrect integer valueの直し方」

株式会社RJC ― SI事業・SES事業・AI駆動開発。RJCは一緒に成長を楽しめる会社です。

WE ARE HIRING

RJCで一緒に開発しながら、
成長を楽しみませんか?

RJCは、Web・モバイル・AIを活用した開発プロジェクトで、テックリードやPM・PMOも活躍するシステム開発会社です。会社を知る、待遇を確かめる、話を聞いてみる。気になるところ見てみてください!

  • 127日年間休日
  • 12時間平均残業時間
  • 毎日ガチャ遊びココロも大切にする福利厚生。アマギフなどの賞品ラインナップ!

ほかにも、チケットレストラン、書籍読み放題、2年ごとの慰労報奨(休暇 or 金一封)、11期連続の黒字決算。

ABOUT RJC RJCがどんな会社か知る 考え方、研修、働き方、福利厚生、社員の前職まで。RJCのことが丸わかり! RJC丸わかりページへ JOB DESCRIPTION 仕事内容・待遇を見てみる 仕事内容、給与・待遇、選考の流れ。経験者も未経験も!応募前に知りたいこと、まとめました! 募集要項を見る ENTRY エントリーする エントリーは1〜2分・履歴書不要です。まずは話を聞いてみたい、という方でも歓迎です! エントリーフォームへ

RJCで一緒に開発しながら、 成長を楽しみませんか?