MySQL и MariaDB LinuxWindowsmacOS 140622001

Что делать, если MySQL не импортирует CSV: Data too long for column

  • Обновлено
  • Чтение ≈ 4 минуты

Краткий ответ

ERROR 1406 (22001) «Data too long for column» во время импорта CSV означает, что значение для конкретного столбца не помещается в заданный тип или размер. При работе с UTF-8 нужно отличать длину в символах от байтов и проверять не только VARCHAR, но и разбор разделителей: иногда две колонки ошибочно считываются как одна.

В этой статье
  1. Что означает неисправность
  2. Возможные причины и признаки
  3. Пошаговая диагностика и решение
  4. Команды для диагностики и проверки
  5. Пример для отдельной тестовой базы или учебного проекта
  6. Проверка результата и дальнейшие действия

#Что означает неисправность

ERROR 1406 (22001) «Data too long for column» во время импорта CSV означает, что значение для конкретного столбца не помещается в заданный тип или размер. При работе с UTF-8 нужно отличать длину в символах от байтов и проверять не только VARCHAR, но и разбор разделителей: иногда две колонки ошибочно считываются как одна.

#Возможные причины и признаки

Возможная причинаКак узнатьЧто делать
Данные длиннее описания поляСтолбец VARCHAR(20) получает 25 символов; исправление связано с данными или согласованным увеличением размера.Ошибка стабильно на строках с длинным именем или примечанием.Сравнить CHAR_LENGTH значения с определением столбца.
CSV разобран неверноНеверные FIELDS TERMINATED BY или ENCLOSED BY склеивают поля, особенно если внутри текстовых значений есть запятые.Ошибка возникает уже на первой строке или в неожиданном поле.Сверить точный разделитель, кавычки и окончания строк.
Проблема кодировки или ограничения байтовСодержимое файла не соответствует объявленному CHARACTER SET либо значение упирается в размер поля типа VARBINARY/BLOB.Вместо ожидаемых символов видны замены или ошибки декодирования.Уточнить кодировку и тип столбца до изменений схемы.

#Пошаговая диагностика и решение

  1. Узнайте номер строки и название столбца из ошибкиОткройте протокол импорта в MySQL Workbench или журнал запуска LOAD DATA. Запишите текст Data too long for column ... at row N и имя поля; N относится к обработанным строкам операции и может не совпасть с номером строки редактора при заголовке и многострочных кавычках. Исходный CSV пока не редактируйте и не импортируйте поверх рабочей таблицы повторно.
  2. Откройте исходный CSV без автоматического преобразованияСкопируйте CSV в отдельную папку для разбора. Откройте копию в редакторе, который показывает кодировку и специальные символы, либо используйте просмотр в Python с явной кодировкой utf-8-sig для BOM. Убедитесь, что это настоящий CSV, а не таблица с разделителями ; и кавычками; Excel может менять содержимое чисел и дат при сохранении.
  3. Проверьте определение целевой колонкиОткройте SQL Editor в Workbench либо терминал с клиентом mysql, выберите нужную базу и выполните SHOW CREATE TABLE import_contacts;, заменив учебное имя на своё. Найдите поле из сообщения и его тип: VARCHAR(20), TEXT, VARBINARY и т. д. Если оно CHARACTER SET utf8mb4, VARCHAR(N) ограничивает число символов N, а не просто количество байтов.
  4. Установите фактическую длину проблемного значенияВ открытой копии CSV найдите запись, соответствующую ошибке, и проверьте значение именно того поля, которое названо MySQL. Для чистого текста измеряйте количество символов, а не размер файла. Если данные содержат эмодзи, один символ может занимать четыре байта; для BINARY/VARBINARY важен байтовый размер. Значение нельзя произвольно обрезать, если оно имеет юридическое или бизнес-значение.
  5. Сверьте параметры разбора CSV перед импортомСравните реальный разделитель и использование кавычек с FIELDS TERMINATED BY и OPTIONALLY ENCLOSED BY. Если CSV содержит имена полей в первой строке, проверьте необходимость IGNORE 1 LINES. При работе через LOAD DATA укажите CHARACTER SET utf8mb4 для UTF-8 файла; SET NAMES сам по себе не определяет кодировку содержимого файла. Не включайте LOCAL только ради обхода ограничения доступа.
  6. Проверьте одну запись в отдельной таблицеВ отдельной тестовой базе создайте временную таблицу с такой же длиной поля и попробуйте вставить исправленный контрольный текст. Ошибка 1406 на VARCHAR(5) при строке длиннее пяти символов подтвердит предел; успешный результат для короткой строки исключит недоступность БД. Если загружаете реальный файл, используйте специально подготовленный обезличенный фрагмент, а не персональные данные клиентов.
  7. Выберите исправление без потери содержанияЕсли бизнес-правила допускают увеличение поля, согласуйте миграцию к VARCHAR большего размера или TEXT, проверьте индексы и возможное время блокировки; сначала на копии БД. Если CSV разбирается неверно — исправьте разделители и кодировку импорта вместо изменения поля. Если лишние символы действительно ошибочны, исправьте источник данных, сохранив исходный файл для сверки.
  8. Повторите импорт в чистую тестовую таблицу и проверьте выборкуПосле изменений загрузите несколько обезличенных строк сначала в тестовую таблицу и выполните выборку их длины. Ожидается отсутствие 1406, корректная кириллица и точное соответствие количества столбцов. Если возникает предупреждение вместо ошибки, выполните SHOW WARNINGS сразу после импорта и убедитесь, что данные не обрезаны. Повторный импорт в рабочую таблицу делайте по плану, исключающему дубли.

#Команды для диагностики и проверки

SQLКоманда
В SQL-редакторе после выбора тестовой БД; названия import_contacts/name учебные и должны быть заменены реальными. OCTET_LENGTH показывает байты, CHAR_LENGTH — символы.
SHOW CREATE TABLE import_contacts;
SELECT CHAR_LENGTH(name) AS characters, OCTET_LENGTH(name) AS bytes FROM import_contacts LIMIT 5;

#Пример для отдельной тестовой базы или учебного проекта

SQL
Демонстрация только в тестовом сеансе со строгим режимом sql_mode. Ошибка на Москва ожидаема; Мир успешно вставляется. В нестрогом режиме возможна потеря данных и предупреждение: проверьте sql_mode и SHOW WARNINGS.
CREATE TEMPORARY TABLE whelp_csv_test (name VARCHAR(5) CHARACTER SET utf8mb4);
INSERT INTO whelp_csv_test VALUES ('Москва'); -- 6 букв: ожидается 1406 в строгом режиме
INSERT INTO whelp_csv_test VALUES ('Мир');
SELECT name, CHAR_LENGTH(name) FROM whelp_csv_test;

#Проверка результата и дальнейшие действия

Проверка успешна, если строки после контрольного импорта сохраняются целиком, CHAR_LENGTH соответствует ожидаемому значению, предупреждений о усечении нет и количество строк совпадает с исходным набором. Если ошибка сместилась на другой столбец, не расширяйте все поля сразу: повторите анализ конкретного столбца. Для отката восстановите исходные параметры импорта и таблицу из согласованной резервной копии.

Источники и обновления

Последнее обновление статьи: 2 ноября 2026. Версии программ и интерфейсы меняются — если шаги не совпадают с вашей версией, сверяйтесь с документацией производителя.