como solucionar general error 1364 field doesnt have default value

Cómo solucionar MariaDB general error 1364 Field doesn’t have default value

MariaDB se ha convertido en una de las bases de datos más utilizadas desde lo que pasó con MySQL y Oracle, pero aun así, comparten base y el método vale para las dos cosas. Entre otros problemas, vamos a ver cómo arreglar el error 1364 de MariaDB/MySQL Field doesn’t have default value.

Esta es una tarea sencilla pero ten en cuenta que vamos a tocar la configuración interna de MySQL, y que depende también de los parámetros que necesites.

Cómo solucionar error 1364 Field doesn’t have default value

Tienes dos formas de hacerlo, la primera sería ejecutando un comando directamente sobre el servidor MariaDB o MySQL. Para esto generalmente vas a necesitar un usuario con permisos de administración de la base de datos, y puedes hacerlo desde phpMyAdmin, programas de terceros o la terminal MySQL.

Si no te aclaras en cómo ejecutar los comandos en la base de datos, más abajo te dejo varias formas de hacerlo.

¿Por qué pasa esto?

Esto pasa simplemente porque al intentar insertar o actualizar datos, en ocasiones pasamos solo los que queremos insertar/actualizar esperando que los demás sean directamente NULL.

Dependiendo de cómo esté configurada la base de datos, el pasar datos vacíos, o con strings sin contenido como ‘’, no está permitido, y es por lo que se devuelve el error.

Arreglar Field doesn’t have default value ejecutando comandos en la base de datos

Primero asegúrate de qué parámetros tienes configurados en la base de datos para no borrar alguno que necesites, ejecuta:

SELECT @@sql_mode;

Y te tiene que devolver algo así:

+------------------------------------------------------+
| @@sql_mode                                           |
+------------------------------------------------------+
| STRICT_TRANS_TABLES,ONLY_FULL_GROUP_BY,NO_ZERO_DATE  |
+------------------------------------------------------+

De aquí, te interesa copiar todo lo que no sea STRICT_TRANS_TABLES (puede que no esté esa parte, o incluso que esté vacío, no te preocupes. Nos quedamos con ONLY_FULL_GROUP_BY,NO_ZERO_DATE en este ejemplo.

Léete también  ¿Qué es el ZSL o Zero Shutter Lag?

Ahora vas a ejecutar otro comando, pero esta vez añadiendo :

Si tenías algo como en el ejemplo ejecuta este:

set global SQL_MODE="NO_ENGINE_SUBSTITUTION,ONLY_FULL_GROUP_BY,NO_ZERO_DATE";

Si no había nada en sql_mode ejecuta este otro:

set global SQL_MODE="NO_ENGINE_SUBSTITUTION";

Ves que la única diferencia es que hemos añadido lo que hemos encontrado antes en la configuración actual a NO_ENGINE_SUBSTITUTION que es el que solucionará el problema. Y también fíjate que tienes que quitar STRICT_TRANS_TABLES en caso de que exista.

Después de esto debería funcionar directamente la consulta que estabas intentando ejecutar antes.

Ojo: este método no debería ser permanente, es decir, si reinicias la base de datos lo normal es que se resetee dependiendo de cómo la tengas configurada. Si al reiniciarla pierdes la configuración tienes que usar el método siguiente.

Arreglar Field doesn’t have default value editando la configuración de la base de datos

Bueno, si estás mirando esta parte es porque necesitas hacerlo permanente o no te está persistiendo entre reinicios.

Lo único, es que para este método vas a necesitar acceso a los archivos de configuración del servidor, ya sea en linux, o en windows (con xampp por ejemplo).

Se trata de editar el archivo .cnf, pero también va a depender de qué base de datos estés usando y de qué archivos de configuración tengas. No te preocupes, ahora te aclaro qué editar en cada caso.

En Xampp, Wampserver o demás, hay una opción en el menú para editar la configuración de MySQL, puedes simplemente darle a abrir y te saldrá con el bloc de notas para editar.

En Linux, es posible que tengas MariaDB y varios archivos y carpetas más de configuración, esta es la lista por orden de preferencia que deberías editar, solo necesitas editar el primero que encuentres:

  1. /etc/mysql/mariadb.conf.d/50-server.cnf
  2. /etc/mysql/conf.d/mysql.cnf
  3. /etc/mysql/my.cnf
Léete también  Como ver los archivos modificados recientemente en Windows 10 y anteriores

En caso de que no te aparezca ninguno de estos deberías revisar donde tienes la instalación del servidor echa, puedes dejarme un comentario y te echo un cable para arreglarlo.

Recuerda, edita solo 1, 2 o 3. En caso de que exista la carpeta /etc/mysql y no haya nada dentro puedes crear my.cnf manualmente. También que para editar en linux puedes usar nano o vim:

nano /etc/mysql/my.cnf
vim /etc/mysql/my.cnf

Ahora que ya tienes el archivo, debes buscar la sección que empieza con mysql y debajo añadir esto

[mysqld]
sql-mode=”NO_ENGINE_SUBSTITUTION”

------------
OJO en algunas versiones hay que ponerlo así
sql_mode=”NO_ENGINE_SUBSTITUTION”

Revisa si ya existe sql-mode, y si está ahí simplemente añade NO_ENGINE_SUBSTITUTION, y acuérdate siempre de eliminar STRICT_TRANS_TABLES para que no entre en conflicto.

Tras hacer esto toca reiniciar mysql o mariadb (uno de estos comandos aunque no importa si los ejecutas todos):

/etc/init.d/mysqld restart
/etc/init.d/mariadb restart
systemctl restart mysqld
systemctl restart mariadb

Cómo ejecutar comandos en bases de datos MySQL o MariaDB

Si no tienes mucha experiencia con esto o si no lo has hecho nunca puede ser un poco rebuscado, pero es bastante simple.

Vas a necesitar, o bien tener phpMyAdmin (u otro gestor de base de datos de lado servidor), un programa de terceros, o acceso a la consola MySQL/MariaDB.

Si usas phpMyAdmin, simplemente accede a él, en la parte superior verás una opción que indica SQL (sin entrar en ninguna base de datos), dale.

Ahí te sale un area de texto y un botón continuar, simplemente rellénalo con los comandos y dale al botón.

En caso de estar usando un programa de terceros, posiblemente lleve integrada una consola mysql como Navicat por ejemplo:

Léete también  Cómo prevenir y bloquear el hack nyet.gif

Por otro lado, si quieres hacerlo desde la consola o terminal es lo mismo si tienes el servidor de bases de datos en Windows o Linux, tienes que abrir una de las consolas y ejecutar lo siguiente:

mysql

si tienes usuario con permisos y contraseña ejecútalo así:

mysql -uroot -p

Cambia root por tu usuario y no dejes espacios entre -u y root, tiene que ir todo junto. Esto debería mandarte directo a la consola de mysql.

En este punto deberías tener el problema resuelto, pero si no es así no te lo pienses y déjame un comentario, intentaré echarte un cable lo antes posible (trato de llevar los comentarios al día).

¿Qué servidor de bases de datos usas? ¿Windows o Linux?Comenta y comparte


AYUDANOS a poder seguir dando respuestas. Te podemos echar una mano y tú también a nosotros, símplemente dale a me gusta.