MySQL слишком длинный усечение/ошибка настройки varchar
У меня есть два экземпляра MySQL. Первый обрезает строки при вставке, когда данные слишком длинны. Второй вызывает ошибку:
ERROR 1406 (22001): Data too long for column 'xxx' at row 1
Я хочу, чтобы второй урезал данные.
Есть ли какой-либо параметр MySQL для управления этим поведением?
Ответы
Ответ 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