Код ошибки: 1406. Данные слишком длинны для столбца - MySQL
Код ошибки: 1406. Слишком длинные данные для столбца
CREATE TABLE `TEST`
(
`idTEST` INT NOT NULL ,
`TESTcol` VARCHAR(45) NULL ,
PRIMARY KEY (`idTEST`)
);
Теперь Insert
некоторые значения
INSERT INTO TEST
VALUES
(
1,
'Vikas'
)
select
SELECT * FROM TEST;
Вставка записи больше, чем length
INSERT INTO TEST
VALUES
(
2,
'Vikas Kumar Gupta Kratika Shukla Kritika Shukla'
)
Если select
length
SELECT LENGTH('Vikas Kumar Gupta Kratika Shukla Kritika Shukla')
'47'
И отображается сообщение об ошибке
Код ошибки: 1406. Слишком длинные данные для столбца
Но каково мое ожидание, я хочу вставить как минимум первые 45 символов в таблицу
пожалуйста, дайте мне знать, если вопрос непонятен.
Я знаю причину этой ошибки. Я пытаюсь вставить значения больше, чем длина типа данных.
Я хочу решение в MySQL, как это возможно в MS SQL
. Поэтому я надеюсь, что это также будет в MySQL.
Ответы
Ответ 1
MySQL будет обрезать любое значение вставки, которое превышает указанную ширину столбца.
чтобы сделать это без ошибок, попробуйте переключить SQL mode
, чтобы не использовать STRICT
.
Справочное руководство Mysql
EDIT:
Чтобы изменить режим
Это можно сделать двумя способами:
- Откройте файл
my.ini
(Windows) или my.cnf
(Unix) в каталоге установки MySQL и найдите текст "sql-mode".
Найти:
Код:
# Set the SQL mode to strict
sql-mode="STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION"
Заменить на:
Код:
# Set the SQL mode to strict
sql-mode="NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION"
Или
- Вы можете выполнить SQL-запрос в своем инструменте управления базами данных, таком как phpMyAdmin:
Код:
SET @@global.sql_mode= '';
Ответ 2
Я думаю, что отключить режим STRICT не очень хорошо, потому что приложение может начать проигрывать данные, введенные пользователями.
Если вы получили значения для TESTcol из приложения, вы можете добавить проверку модели, например, в Rails
validates :TESTcol, length: { maximum: 45 }
Если вы манипулируете значениями в SQL script, вы можете обрезать строку командой SUBSTRING
INSERT INTO TEST
VALUES
(
1,
SUBSTRING('Vikas Kumar Gupta Kratika Shukla Kritika Shukla', 0, 45)
);
Ответ 3
Это шаг, который я использую с Ubuntu. Это позволит вам вставить более 45 символов из вашего ввода, но MySQL сократит ваш текст до 45 символов для вставки в базу данных.
Запустить команду
sudo nano/etc/mysql/my.cnf
Затем вставьте этот код
[mysqld]
sql-mode="NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION"
перезапустите MySQL
sudo service mysql restart;
Ответ 4
Попробуйте проверить пределы вашей базы данных SQL. Возможно, вы превысили предел поля для этой строки.
Ответ 5
Перейдите в свои модели и проверьте, потому что вы могли бы усечь несколько слов для этого конкретного столбца, например. max_length = "150".