Подтвердить что ты не робот

Код ошибки: 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.

4b9b3361

Ответ 1

MySQL будет обрезать любое значение вставки, которое превышает указанную ширину столбца.

чтобы сделать это без ошибок, попробуйте переключить SQL mode, чтобы не использовать STRICT.

Справочное руководство Mysql


EDIT:

Чтобы изменить режим

Это можно сделать двумя способами:

  1. Откройте файл 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"

Или

  1. Вы можете выполнить 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 символов для вставки в базу данных.

  1. Запустить команду

    sudo nano/etc/mysql/my.cnf

  2. Затем вставьте этот код

    [mysqld] sql-mode="NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION"

  3. перезапустите MySQL

    sudo service mysql restart;

Ответ 4

Попробуйте проверить пределы вашей базы данных SQL. Возможно, вы превысили предел поля для этой строки.

Ответ 5

Перейдите в свои модели и проверьте, потому что вы могли бы усечь несколько слов для этого конкретного столбца, например. max_length = "150".