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

MySQL слишком длинный усечение/ошибка настройки varchar

У меня есть два экземпляра MySQL. Первый обрезает строки при вставке, когда данные слишком длинны. Второй вызывает ошибку:

ERROR 1406 (22001): Data too long for column 'xxx' at row 1

Я хочу, чтобы второй урезал данные. Есть ли какой-либо параметр MySQL для управления этим поведением?

4b9b3361

Ответ 1

Вы можете отключить STRICT_TRANS_TABLES и STRICT_ALL_TABLES. Это позволяет автоматически усекать вставленную строку.

Цитата из MySQL Documantation.

Строгий режим определяет, как MySQL обрабатывает недопустимые или отсутствующие значения в такие как INSERT или UPDATE. Значение может быть недействительным по нескольким причинам. Например, у него могут быть неверные данные тип для столбца, или он может быть вне допустимого диапазона. Значение отсутствует когда новая строка, которая должна быть вставлена, не содержит значения для не-NULL который не имеет явного предложения DEFAULT в своем определении. (Для Столбец NULL, NULL вставлен, если значение отсутствует.)

Ссылка: Режимы SQL сервера MySQL

Ответ 2

Если строгий режим SQL не включен и вы присваиваете значение столбцу CHAR или VARCHAR, который превышает максимальную длину столбца, значение усекается, чтобы соответствовать, и генерируется предупреждение. Для усечения несовместимых символов вы можете вызвать ошибку (а не предупреждение) и подавить вставку значения с помощью строгого режима SQL. См. Раздел 6.1.7 "Режимы сервера SQL".

Как вы можете его изменить: http://dev.mysql.com/doc/refman/5.7/en/sql-mode.html


Найдено два способа отключить строгий режим:

  • добавить ниже в my.cnf

    SQL-режим = "NO_AUTO_CREATE_USER, NO_ENGINE_SUBSTITUTION"

  • используется консоль mysql.

    SET @@global.sql_mode = '';

Протестируйте их перед запуском в рабочей среде.

Ответ 3

если вы используете cpanel,

заменить

sql-mode="NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION"

в/usr/my.cnf

к

sql-mode=""

бег

/etc/init.d/mysql restart