MySQL configuración de truncamiento / error de varchar demasiado larga

Tengo dos instancias de MySQL. El primero trunca las cadenas en el inserto cuando los datos son demasiado largos. El segundo genera un error:

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

Quiero que el segundo también trunque los datos. ¿Hay alguna configuración de MySQL para gestionar este comportamiento?

Puede deshabilitar STRICT_TRANS_TABLES y STRICT_ALL_TABLES . Esto permite el truncamiento automático de la cadena insertada.

Cita de la documentación de MySQL.

El modo estricto controla la forma en que MySQL maneja los valores inválidos o perdidos en las instrucciones de cambio de datos como INSERT o UPDATE. Un valor puede ser inválido por varias razones. Por ejemplo, podría tener el tipo de datos incorrecto para la columna, o podría estar fuera de rango. Falta un valor cuando una nueva fila para insertar no contiene un valor para una columna no NULL que no tiene una cláusula DEFAULT explícita en su definición. (Para una columna NULL, se inserta NULL si falta el valor.)

Referencia: Modos SQL del servidor MySQL

Si el modo SQL estricto no está habilitado y asigna un valor a una columna CHAR o VARCHAR que exceda la longitud máxima de la columna, el valor se trunca para ajustarse y se genera una advertencia. Para el truncamiento de caracteres no espaciales, puede provocar un error (en lugar de una advertencia) y suprimir la inserción del valor mediante el uso del modo SQL estricto. Consulte la Sección 6.1.7, “Modos SQL del servidor”.

Cómo puede cambiarlo: http://dev.mysql.com/doc/refman/5.7/en/sql-mode.html


Encontré dos formas de deshabilitar el modo estricto:

  1. agregar debajo a my.cnf

    sql-mode = “NO_AUTO_CREATE_USER, NO_ENGINE_SUBSTITUTION”

  2. manera está utilizando la consola de mysql.

    SET @@ global.sql_mode = ”;

Por favor, pruébelas antes de ejecutar en el entorno de producción.

si usas cpanel,

reemplazar

 sql-mode="NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION" 

en /usr/my.cnf

a

 sql-mode="" 

correr

 /etc/init.d/mysql restart