When inserting values to a table in MySQL, you might run into this error:
Error Code: 1406. Data too long for column
That error message means you are inserting a value that is greater than the defined maximum size of the column.
The solution to resolve this error is to update the table and change the column size.
Example
We have a simple table employees
:
CREATE TABLE employees (
id int(5),
full_name varchar(5)
);
And you insert the first row of data:
INSERT INTO employees
VALUES(1, 'Alex with an extra long full name, longer than 10');
Since the full_name
value is longer than the defined length, MySQL will throw the error Data too long for column. To resolve that, modify the column size:
ALTER TABLE employees
MODIFY COLUMN full_name varchar(50);
Another workaround is to disable the STRICT
mode, MySQL will automatically truncate any insert values that exceed the specified column width instead of showing the error. The trade-off is, you might not be aware that your data won’t fit and end up losing original data.
To disable the STRICT
mode, you can:
- Edit your MySQL configuration file:
Open your my.ini
(Windows) or my.cnf
(Unix) file and look for “sql-mode”, and remove the tag STRICT_TRANS_TABLES
- Or execute this command:
SET @@global.sql_mode= '';
Need a good GUI tool for databases? TablePlus provides a native client that allows you to access and manage Oracle, MySQL, SQL Server, PostgreSQL, and many other databases simultaneously using an intuitive and powerful graphical interface.
Download TablePlus for Mac.
Not on Mac? Download TablePlus for Windows.
On Linux? Download TablePlus for Linux
Need a quick edit on the go? Download TablePlus for iOS
This error can occur if you try to set data higher than the allowed limit. As an example, you cannot store a string in a column of type bit because varchar or string takes size higher than bit data type.
You need to use the following syntax for bit type column:
anyBitColumnName= b ‘1’ OR anyBitColumnName= b ‘0’
To understand the above syntax, let us create a table. The query to create a table is as follows:
mysql> create table IncasesensitiveDemo -> ( -> Id int NOT NULL AUTO_INCREMENT, -> Name varchar(10), -> PRIMARY KEY(Id) -> ); Query OK, 0 rows affected (0.70 sec)
Insert some records in the table using insert command. The query to insert record is as follows:
mysql> insert into ErrorDemo(Name,isStudent) values('John',1); Query OK, 1 row affected (0.18 sec) mysql> insert into ErrorDemo(Name,isStudent) values('Sam',0); Query OK, 1 row affected (0.21 sec) mysql> insert into ErrorDemo(Name,isStudent) values('Mike',0); Query OK, 1 row affected (0.16 sec) mysql> insert into ErrorDemo(Name,isStudent) values('Larry',1); Query OK, 1 row affected (0.23 sec) mysql> insert into ErrorDemo(Name,isStudent) values('Carol',1); Query OK, 1 row affected (0.11 sec) mysql> insert into ErrorDemo(Name,isStudent) values('Robert',0); Query OK, 1 row affected (0.17 sec) mysql> insert into ErrorDemo(Name,isStudent) values('James',1); Query OK, 1 row affected (0.18 sec) mysql> insert into ErrorDemo(Name,isStudent) values('Bob',1); Query OK, 1 row affected (0.19 sec) mysql> insert into ErrorDemo(Name,isStudent) values('David',1); Query OK, 1 row affected (0.15 sec) mysql> insert into ErrorDemo(Name,isStudent) values('Ricky',0); Query OK, 1 row affected (0.17 sec)
Display all records from the table using select statement. The query is as follows:
mysql> select *from ErrorDemo;
The following is the output:
+----+--------+-----------+ | Id | Name | isStudent | +----+--------+-----------+ | 1 | John | | | 2 | Sam | | | 3 | Mike | | | 4 | Larry | | | 5 | Carol | | | 6 | Robert | | | 7 | James | | | 8 | Bob | | | 9 | David | | | 10 | Ricky | | +----+--------+-----------+ 10 rows in set (0.00 sec)
The actual sample output snapshot is as follows:
The error is the following as discussed above. It gets generated in the below query:
mysql> update ErrorDemo set isStudent='1' where Id=9; ERROR 1406 (22001): Data too long for column 'isStudent' at row 1
To avoid the above error, you need to prefix b before ‘1’. Now the query is as follows:
mysql> update ErrorDemo set isStudent=b'1' where Id=9; Query OK, 0 rows affected (0.00 sec) Rows matched: 1 Changed: 0 Warnings: 0
Check the table records once again using select statement. The query is as follows:
mysql> select *from ErrorDemo;
The following is the output:
+----+--------+-----------+ | Id | Name | isStudent | +----+--------+-----------+ | 1 | John | | | 2 | Sam | | | 3 | Mike | | | 4 | Larry | | | 5 | Carol | | | 6 | Robert | | | 7 | James | | | 8 | Bob | | | 9 | David | | | 10 | Ricky | | +----+--------+-----------+ 10 rows in set (0.00 sec)
The actual sample output snapshot is as follows:
Look at the is Student column.
Now we will update the same id with the value 0. This will give a blank value with corresponding Id. The query is as follows:
mysql> update ErrorDemo set Name='Maxwell', isStudent=b'0' where Id=9; Query OK, 1 row affected (0.16 sec) Rows matched: 1 Changed: 1 Warnings: 0
Check the record of particular row updated above. Here is the Id 9. Now row has been updated with record Id 9. The query is as follows:
mysql> select *from ErrorDemo where Id=9;
The following is the output:
+----+---------+-----------+ | Id | Name | isStudent | +----+---------+-----------+ | 9 | Maxwell | | +----+---------+-----------+ 1 row in set (0.00 sec)
How to deal with the 1406 (22001) Data too long for column error message.
4041 views
By. Jacob
Edited: 2020-08-29 11:02
ERROR 1406 (22001): Data too long for column
This error happens because you are trying to insert data that is longer than the column width.
There is at least a few solutions to this problem.
We can truncate the data, cutting off the data that goes beyond the column boundary; this is however not ideal, as it might lead to data loss and data corruption, and it does not deal with the underlying reason for the problem very effectively — it just moves it beyond the horizon. So, what can we do instead?
Assuming you got access to the PHP code, you should most likely be validating the data length before submitting it to the database. Doing this will ensure that the data is never too long for the column.
You can also make the column itself longer in order to fit more data into the column, this can be done with the alter table query:
alter table request_log modify column user_agent varchar(500);
The maximum size of a varchar column is 65.535 characters.
ERROR 1406 (22001): Data too long for column
The error happens because the input data was too long for the column in a database table.
For example, if you defined the column width with varchar(100), and the data is more than 100 characters long, you will get the error:
ERROR 1406 (22001): Data too long for column
This error can also occur when a script is attempting to insert a string in a bit column. For example, a developer might accidentally have written ‘1’ instead of 1 — when inserting bit values, the value should not be quoted, as this would cause MySQL to treat it as a string rather than a bit. A single character might be 8 bits long, while a single bit is just 1 bit long, and hence the error Data too long for column is triggered.
Solutions
To solve the problem, you should be sure that the data does not exceed the column width in the database table before submitting it. This can be done with a combination of strlen and substr
// If the data is longer than the column width, it is violently cut off! $user_agent ?? $_SERVER['HTTP_USER_AGENT']; if (strlen($user_agent) > 255) { $user_agent = substr($user_agent,0,255); }
We can also increase the width of the varchar column; in order to increase the width to 500 characters, we can execute the following SQL query:
alter table request_log modify column user_agent varchar(500);
Debugging errors in general
The problem when debugging these errors often is that the CMS you are using might not report the exact error on the front-end, so you will have to track down the error message manually. This can be difficult, because you need to find the exact line in your code where the error is triggered.
Sometimes you might not even be able to tell what exactly the error is, since the front-end error message that is shown is a catch-all 500 — Internal Server Error. So, in order to debug the problem, you will often have to dig through the error log file. If you are using Apache, the website error log will often be located at: /var/log/apache2/my_site_name_com-error.log
Of course, finding the relevant error in the log might prove difficult. However, if you are able to consistently reproduce the error by sending a specific request, you could simply filter for your own IP address:
grep 'xxx.xxx.xxx.xxx' /var/log/apache2/my_site_name_com-error.log
This should tell you the exact line where the error occurred in your PHP code, and allow you to do further debugging.
Another nice trick is to add a «test» request parameter, and then you can perform debugging even on the live server, without effecting users. I.e.:
if (isset($_GET['debugging'])) { var_dump($variable_to_debug); exit(); }
Finally, if you are worried about a user guessing the test parameter, you can just add a check for you IP address; this will avoid the risk that someone enters in the «debugging» parameter and sees something they should not.
-
How to configure phpMyAdmin with automatic login by setting auth_type to config.
-
How to create new users in MySQL and control their permissions for better security.
-
How to generate sitemaps dynamically using PHP.
-
How to perform simple SELECT statements in SQL to communicate with SQL databases.
-
The error happens when importing database backups using the SOURCE command, either because you got the path wrong, or because you used the command incorrectly.
More in: MySQL
In mysql, ERROR 1406 (22001):data too long for column
: DEFAULT CHARSET=utf8 is added at the end of the created table
drop table if exists sys_user;
create table sys_user (
user_id bigint(20) not null auto_increment comment 'User ID',
dept_id bigint(20) default null comment 'Department ID',
login_name varchar(30) not null comment 'login account',
user_name varchar(30) not null comment 'user nickname',
user_type varchar(2) default '00' comment 'user type (00 system user)',
email varchar(50) default '' comment 'user email',
phonenumber varchar(11) default '' comment 'phone number',
sex char(1) default '0' comment 'User gender (0 male 1 female 2 unknown)',
avatar varchar(100) default '' comment 'avatar path',
password varchar(50) default '' comment 'password',
salt varchar(20) default '' comment 'salt encryption',
status char(1) default '0' comment 'Account status (0 normal 1 disabled)',
del_flag char(1) default '0' comment 'Delete flag (0 means present 2 means deleted)',
login_ip varchar(50) default '' comment 'last login ip', login_date datetime comment 'last login',
create_by varchar(64) default '' comment 'creator', create_time datetime comment 'create time',
update_by varchar(64) default '' comment 'updater', update_time datetime comment 'update time',
comment varchar(500) default null comment 'Remarks', primary key (user_id)
) engine=innodb auto_increment=100 comment = 'user information table' DEFAULT CHARSET=utf8;
insert into sys_user values(1, 103, 'admin', 'admin', '00', '[email protected]', '15888888888', '1', '', '123456', '111111', '0', '0', '127.0.0.1', '2018-03-16 11-33-00', 'admin', '2018-03-16 11-33-00', 'ry', '2018-03-16 11-33-00', 'ADMIN');
insert into sys_user values(2, 105, 'ry', 'admin', '00', '[email protected]', '15666666666', '1', '', '123456', '222222', '0', '0', '127.0.0.1', '2018-03-16 11-33-00', 'admin', '2018-03-16 11-33-00', 'ry', '2018-03-16 11-33-00', 'TEST');
Я создал базу данных и пытаюсь загрузить данные из файла csv электронной таблицы. В нем пока нет данных. Когда я запустил
LOAD DATA INFILE 'docs.csv' INTO list FIELDS TERMINATED BY 't' LINES TERMINATED BY 'n' (vendor, title, project, description, shelf);
Я получаю сообщение « ОШИБКА 1406 (22001): слишком большие данные для столбца» поставщик «в строке 1«. Однако запись поставщика в строке 1 имеет длину 6 символов. Я создал таблицу следующим образом:
CREATE TABLE list (
autonumber SERIAL,
vendor varchar(50),
title varchar(100),
project varchar(100),
description text,
shelf smallint UNSIGNED,
PRIMARY KEY(autonumber));
В столбце описания есть много запятых и возврат каретки (Alt + Enter в электронной таблице); правильно ли я использую t для команды FIELDS TERMINATED и возврат каретки вызывает проблемы?
19 март 2013, в 18:40
Поделиться
Источник
4 ответа
Возможно, ваша кодировка csv файла не такая же, как в наборе символов mysql, это также приведет к «ERROR 1406 (22001): слишком большие данные для столбца ‘vendor’ в строке 1.
например, если ваш набор символов mysql равен GBK, а файл csv закодирован в UTF-8, это приведет к той же ошибке при загрузке.
просто измените кодировку файла на то же, что и набор символов mysql.
PLA
11 июль 2015, в 04:26
Поделиться
Дайте полный путь к infile и сделайте свой код следующим.
LOAD DATA INFILE 'docs.csv' INTO TABLE list
FIELDS TERMINATED BY ','
ENCLOSED BY '"'
LINES TERMINATED BY 'rn' (vendor, title, project, description, shelf);
Дайте путь к вторжению так же, как в следующем примере.
load data local infile 'c:/xampp/htdocs/example.csv'
into table mytbl fields terminated by ','
enclosed by '"'
lines terminated by 'rn'
ignore 1 lines (f_name,age,id);
Надеюсь, это поможет вам.
Abhik Dey
02 дек. 2013, в 09:07
Поделиться
Я думаю, что символы возврата каретки в ваших полях вызовут проблему, потому что ваш разделитель строк n. Возвращение каретки в поле будет принято как конец записи, которую я считаю. Если вы можете добавить цитируемые идентификаторы в свои поля, это может помочь.
Вам нужно добавить этот раздел в свой служебный оператор:
OPTIONALLY ENCLOSED BY '"'
Tom
19 март 2013, в 18:32
Поделиться
значение слишком велико для этого столбца
попробуйте изменить значение от 50 до 100, поскольку это
CREATE TABLE list (
autonumber SERIAL,
vendor varchar(100),
title varchar(100),
project varchar(100),
description text,
shelf smallint UNSIGNED,
PRIMARY KEY(autonumber));
echo_Me
19 март 2013, в 17:22
Поделиться
Ещё вопросы
- 0Где найти 7z dll?
- 0Изучение Ember.js — Как бы я это сделал?
- 0Сбор 2-степенной декомпозиции n (Python, C ++)
- 1Почему метод angular.lowercase использует «bitwise-or 32» для преобразования «A» в «a»? почему бы не использовать + 32?
- 1Удаление файла всегда заканчивается неудачей
- 1Как определить ширину результата codePointAt?
- 1Как правильно масштабировать фоновое изображение TextView для Android
- 1Какова цель безымянных блоков кода в Java?
- 0Есть ли способы повторно использовать подзапрос в синтаксисе SELECT FROM (запрос) в части JOIN?
- 0Как сохранить или структурировать данные конфигурации в MySQL — Php, MySQL
- 1Как правильно установить намерение андроида с действием SHOW_OR_CREATE_CONTACT?
- 1Как мне отформатировать SPARQL для JS?
- 1GATE API и JAPE-код, возвращают пустой результат
- 0Ошибка на UIWebView с jQuery
- 1Как получить количество всех вариантов (скажем, из опроса) в виде столбцов
- 0используя разрешение в маршрутах angularjs
- 1Проверка подлинности паспорта с помощью Google reCaptcha
- 1«With io.open» автоматически закрывает файл?
- 0ИСПРАВЛЕНО: Файл не загружается, думая, что это связано с буферизацией?
- 0HTML-форма отправить в форму JavaScript
- 0Свойство области видимости angular.js @local становится неопределенным, если мы инициализируем его как null
- 1Функция сцепления не работает, когда внутри другой функции
- 1Подчеркивание: потеря ссылки на массив объекта
- 0XDebug с затмением Луны замерзает на 57%
- 0Как узнать, доступен ли уровень отладки dx?
- 0Правильный способ доступа к родительским методам в дочернем классе
- 1связь между закрытым ключом и подписанным сертификатом в хранилище ключей
- 0Не удается получить идентификаторы, присвоенные атрибуту в OpenGL
- 0Как я могу непрозрачность центра изображения?
- 0Получить JSON ошибку при звонке с угловой с Zend Framework 1
- 1Проблема в захвате ключа
- 1Как запустить программы из диспетчера задач другого компьютера
- 1порядок выполнения кода с ожиданием и уведомлением
- 1не удалось получить ответ от сервера express.js через почтальона
- 0Правильное использование видимого свойства привязки данных
- 1Отправка полей и файла с использованием нового System.Net.WebClient
- 0Как установить идентификатор и имя с автозаполнением
- 1Чтение XML-файла с помощью JAXB
- 1строка удаленного подключения от Webmatrix 3 к Microsoft SQL Server
- 1Как обращаться с символом не найти ошибку?
- 0Javascript `this` оператор не работает
- 1Утечки памяти Java с классами
- 1Как узлы в кластере взаимодействуют в ElasticSearch, а также как мы решаем, в каком узле нам следует хранить документ, а затем откуда его искать?
- 0setTimeOut, определить конечную функцию и активировать
- 0Отправить название столбца с кнопки
- 0Несколько указателей на объект, определенный в куче
- 0Утечки памяти, когда мой код компилируется GCC
- 0Как получить доступ к данным из других классов частного внутреннего класса?
- 1Entity Framework: AutoMapper: исключение ObjectStateManager, генерируемое при установке EntityState.Modified для существующего элемента
- 0Парсер Bison: создание функции, которая возвращает токены