Cómo resolver la excepción de MySQL SQLSTATE[HY000]: Error general: 1364 El campo 'field_name' no tiene un valor predeterminado

El error general 1364 se desencadena básicamente cuando intenta insertar / actualizar un registro en su base de datos donde un campo, es decir, el que está activando la excepción no puede ser nulo, sin embargo, está tratando de establecer su valor como nulo (no es aportando un valor por ello). Normalmente, esta excepción solo se activa cuando está usando MySQL en modo estricto , puede obtener el modo que está usando su servidor MySQL con la siguiente consulta:

SELECT @@sql_mode;

Si se enfrenta a esta excepción, probablemente sea porque tiene habilitado el modo estricto ( STRICT_TRANS_TABLES). En este artículo, compartiremos con usted 2 formas de evitar que esta excepción aparezca fácilmente.

A. Solución lógica

Para evitar esta excepción, simplemente proporcione un valor para el campo que está activando la excepción o defina que el campo puede ser nulo, de modo que cuando intente insertar un registro, el valor será nulo pero no se lanzará el error, por ejemplo con una columna que no puede ser nula, la siguiente consulta arrojaría la excepción:

INSERT INTO user (column_a, column_b) VALUES ("Value First Column", NULL);

Entonces podría alterar la columna para hacer que la columna sea anulable:

ALTER TABLE YourTable MODIFY column_b VARCHAR(255) DEFAULT NULL;

Y eso es todo, la excepción ya no debería aparecer.

B. Solución del lado del servidor

Si no puede definir por sí mismo el valor de la columna porque está utilizando un marco u otro tipo de lógica que primero inserta el registro con nulo y luego se actualiza, puede confiar en la forma fácil de eliminar el modo estricto de MySQL. De alguna manera, esto no se recomienda ya que evita, por ejemplo, la inserción de un valor vacío en una columna que no puede ser nula y arroja la excepción mencionada. Todo sucede básicamente como una medida de control que evita que su lógica falle y le impide escribir código flappy, donde puede pasar por alto la lógica escrita incorrecta, etc.

En otros casos, la lógica que escribió funciona en su entorno local, porque probablemente no haya configurado el modo estricto allí, pero en su servidor de producción no funciona debido a este modo. En este caso, puede deshabilitar el modo estricto modificando el archivo de configuración de MySQL ( my.inien Windows o my.cnfen Linux) configurando sql_mode en una cadena vacía o eliminando la opción  STRICT_TRANS_TABLES que configura MySQL en modo estricto y teniendo el modo  NO_ENGINE_SUBSTITUTION habilitado:

[mysqld]
sql-mode=""
# Or
# sql-mode="NO_ENGINE_SUBSTITUTION"

Guarde los cambios, reinicie el servicio mysql y el error ya no aparecerá, en su lugar, la columna se establecerá en nula aunque no está permitido.

Que te diviertas ❤️!

Esto podria interesarte

Conviertete en un programador más sociable