ERROR 1406 (22001): Data too long for column 'name' at row 1 は、列に決めた長さより長い値を入れようとしたときのエラーです。 エラー文に、どの列か('name')と、何行目か(at row 1)が出ています。

直し方は2つです。

状況 直し方
入れる値が想定より長い(入力ミス・変換ミス) 入れる側で長さを確かめる・そろえる
列の長さが足りない(仕様が変わった・移行元が長い) ALTER TABLE ... MODIFY で列を広げる

確認環境:MySQL 8.0.46(文字コード utf8mb4、sql_mode は既定)(確認日 2026年10月11日)。VARCHAR(10)・CHAR(5)・TINYTEXT の列に、日本語・英字・絵文字を入れて再現しました。

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

(記載例)出典:株式会社RJC「MySQL Data too long for columnの直し方|1406」

再現:VARCHAR(10) は「10文字」

CREATE TABLE member (
  id   int PRIMARY KEY,
  name varchar(10),
  code char(5),
  bio  tinytext
) DEFAULT CHARSET = utf8mb4;
入れた値 文字数 バイト数 結果
あいうえおかきくけこ 10 30 入る
あいうえおかきくけこさ 11 33 ERROR 1406('name')
🍣 × 10(絵文字) 10 40 入る
abcdefghijk 11 11 ERROR 1406
code に A00005(CHAR(5) に6文字) 6 6 ERROR 1406('code')

VARCHAR(10)・CHAR(5) の数字は、バイト数ではなく文字数です(MySQL 公式マニュアル)。日本語でも絵文字でも、10文字までなら入り、英字でも11文字なら入りません。Oracle の VARCHAR2(10)(既定はバイト数)のように、バイト数で長さを決める DB から移行するときに、考え方の違いでずれが出ます。

TEXT 系はバイト数で数える

列 入れた値 バイト数 結果
TINYTEXT あ × 85 255 入る
TINYTEXT あ × 86 258 ERROR 1406('bio')
TINYTEXT a × 256 256 ERROR 1406

TINYTEXT の上限は 255 バイトで、日本語(utf8mb4 で1文字3バイト)なら 85 文字まででした。TEXT 系の型は、文字数ではなくバイト数の上限で決まります。

型 上限
VARCHAR(n)・CHAR(n) n 文字
TINYTEXT 255 バイト
TEXT 65,535 バイト
MEDIUMTEXT 約 16MB

「at row N」の読み方

INSERT INTO member VALUES (11,'OK',...), (12,'OK',...), (13,'あいうえおかきくけこさしすせそ',...);
ERROR 1406 (22001): Data too long for column 'name' at row 3

at row 3 は、テーブルの3行目ではなく、その INSERT 文の中の3つ目の値です。複数の行をまとめて INSERT すると、何番目が長すぎたかが分かります。このとき、1つ目・2つ目の行も入りませんでした(文全体が取り消される)。CSV の取り込みなら、N 番目のデータ行を確かめます。

非 strict モードでは、黙って切り捨てられる

SET SESSION sql_mode = '';
INSERT INTO member VALUES (14, 'あいうえおかきくけこさしすせそ', 'A0014', NULL);
SHOW WARNINGS;
-- Warning  1265  Data truncated for column 'name' at row 1
SELECT name FROM member WHERE id = 14;
-- あいうえおかきくけこ                   ← 15文字が10文字に切られて保存された

sql_mode から strict モード(STRICT_TRANS_TABLES)を外していると、エラーにならず、後ろが切り捨てられて保存されます。 警告は出ますが、アプリからは気づきにくく、住所や名前の後半が消えたデータが残ります。MySQL 8.0 の既定は strict モードです。1406 を消すために strict モードを外さないようにします。

後ろの空白だけなら、警告で入る

INSERT INTO member VALUES (10, 'あいうえおかきくけこ  ', ...);   -- 10文字+空白2つ
Note  1265  Data truncated for column 'name' at row 1             ← エラーにならず、空白が切られた

長さを超えた部分が空白だけなら、strict モードでもエラーにならず、空白を切って保存されました(公式マニュアルでも、VARCHAR の超えた分の後ろの空白は、sql_mode に関係なく切られるとされています)。

長い値を探す

入っているデータから

SELECT id, CHAR_LENGTH(name) AS len FROM member ORDER BY len DESC LIMIT 10;   -- 文字数
SELECT id, LENGTH(bio)       AS bytes FROM member ORDER BY bytes DESC LIMIT 10; -- バイト数(TEXT 系)

CHAR_LENGTH は文字数、LENGTH はバイト数です。VARCHAR は CHAR_LENGTH、TEXT 系は LENGTH で比べます。

アプリの側で数えるとき(言語によって数え方が違う)

🍣 を10個並べた文字列の長さです。

言語 書き方 結果
MySQL CHAR_LENGTH() 10
Python len(s) 10
JavaScript s.length 20
JavaScript [...s].length 10
Java s.length() 20
Java s.codePointCount(0, s.length()) 10

Java の length() と JavaScript の length は、絵文字などを2と数えます。 画面の入力チェックで length() <= 10 としていると、絵文字入りの短い名前を「長すぎる」と弾いたり、MySQL と判定が食い違ったりします。MySQL の VARCHAR に合わせるなら、Java は codePointCount、JavaScript は [...s].length で数えます。

直し方:列を広げる

ALTER TABLE member MODIFY name varchar(50);

確認環境では、VARCHAR(50) にすると15文字の値が入りました。広げるときの注意です。

注意 内容
インデックスの長さの上限 utf8mb4 で VARCHAR(1000) にインデックスがあると、ERROR 1071 ... max key length is 3072 bytes になる(関連記事の「Incorrect string value」で再現)
大きなテーブルの ALTER 行数が多いと時間がかかる。本番は時間帯を選ぶ
アプリ側の長さのチェック DB だけ広げても、画面やAPIの上限が10文字のままなら入力できない

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

順番 確認すること 方法
1 どの列か エラー文の '列名'
2 何番目の値か at row N(INSERT 文の中の N 番目)
3 列の型と長さ SHOW CREATE TABLE。VARCHAR は文字数、TEXT 系はバイト数
4 値の長さ CHAR_LENGTH(文字数)と LENGTH(バイト数)
5 直す 入れる値を見直す、または ALTER TABLE ... MODIFY
6 strict モード 外さない。外れていたら、切り捨てられたデータがないか確認

よくある質問

Q. 全角は2文字、半角は1文字として数えますか。 A. 数えません。MySQL の VARCHAR は、全角・半角に関係なく1文字は1です。「全角10文字・半角20文字まで」のような仕様なら、アプリ側でバイト数(Shift_JIS 換算など)を数えて確かめます。

Q. LOAD DATA で CSV を取り込むと、エラーにならずに切られました。 A. LOAD DATA LOCAL は、strict モードでも、エラーを警告にして取り込みを続けます(公式マニュアル)。確認環境でも、VARCHAR(10) に13文字の値が Warning 1265 Data truncated だけで、10文字に切られて入りました。取り込んだあとに必ず SHOW WARNINGS を確かめます。

まとめ

  • 列の長さより長い値を入れたエラー。エラー文に列名と行番号が出る
  • VARCHAR(n)・CHAR(n) は n 文字。日本語でも絵文字でも同じ。TEXT 系はバイト数
  • at row N は INSERT 文の中の N 番目。まとめた INSERT は全部取り消される
  • 非 strict モードでは黙って切り捨てられる。strict モードは外さない
  • Java・JavaScript の length は絵文字を2と数える。MySQL に合わせるなら codePointCount・[...s].length
  • 列を広げるなら ALTER TABLE ... MODIFY。インデックスの上限とアプリ側の上限も確認

参考・出典

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

  • MySQL 8.0 Reference Manual「The CHAR and VARCHAR Types」:https://dev.mysql.com/doc/refman/8.0/en/char.html
  • MySQL 8.0 Reference Manual「LOAD DATA Statement」:https://dev.mysql.com/doc/refman/8.0/en/load-data.html

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

(記載例)出典:株式会社RJC「MySQL Data too long for columnの直し方|1406」

株式会社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で一緒に開発しながら、 成長を楽しみませんか?