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