Mi mesa parece
create table try ( name varchar(8), CREATED_BY varchar(40) not null);
y luego tengo un disparador para completar automáticamente el campo CREATED_BY
create trigger autoPopulateAtInsert BEFORE INSERT on try for each row set new.CREATED_BY=user();
Cuando hago una inserción usando
insert into try (name) values ('abc');
la entrada se realiza en la tabla pero sigo recibiendo el mensaje de error
Field 'CREATED_BY' doesn't have a default value Error no 1364
¿Hay alguna manera de suprimir este error sin hacer que el campo sea anulable Y sin eliminar el triggfer? De lo contrario, mi hibernación verá estas excepciones (aunque se hayan realizado las inserciones) y luego la aplicación se bloqueará.
Esto es causado por el
STRICT_TRANS_TABLES
modo SQL definido en elexpediente. Eliminar esa configuración y reiniciar MySQL debería solucionar el problema.
Ver https://www.farbeyondcode.com/Solution-for-MariaDB-Field--xxx--doesn-t-have-a-default-value-5-2720.html
Si editar ese archivo no soluciona el problema, consulte http://dev.mysql.com/doc/refman/5.6/en/option-files.html para conocer otras posibles ubicaciones de los archivos de configuración.
fuente
-- verified that the mode was previously set select @@GLOBAL.sql_mode; -- UPDATE MODE SET @@global.sql_mode= 'YOUR_VALUE';
Abra phpmyadmin y vaya a la pestaña 'Más' y seleccione el submenú 'Variables'. Desplácese hacia abajo para encontrar el modo SQL. Edite el modo sql y elimine 'STRICT_TRANS_TABLES' Guárdelo.
fuente
sudo nano /etc/mysql/my.cnf
agregar[mysqld] sql_mode = "ONLY_FULL_GROUP_BY,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION"
, guardar y salir, y reiniciar mysqlsudo service mysql restart
sql_mode
a nulo, es decir,sql_mode = ""
para otros errores similares.En phpmyadmin, realice lo siguiente:
En mi caso, obtengo lo siguiente:
Copie este resultado y elimínelo
STRICT_TRANS_TABLES
. Luego realice lo siguiente:fuente
phpmyadmin
nada, use estos comandos en lamysql
línea de comandos.Cuando tuve este mismo problema con mysql5.6.20 instalado con Homebrew, lo resolví yendo a my.cnf
Encuentra la línea que se ve así:
Comente la línea anterior y reinicie el servidor mysql
¡Error desaparecido!
fuente
Ejecute la consola mysql:
, seleccione base de datos:
y ejecutar (también desde la consola mysql):
Eso desactivará el modo estricto y mysql no se quejará más.
Para aclarar las cosas: la definición de su base de datos dice "este campo debe tener un valor predeterminado definido", y al realizar los pasos anteriores le dice a MySql "neah, simplemente ignórelo". Entonces, si solo desea hacer una solución rápida localmente, esta solución está bien. Pero generalmente debe investigar en la definición de su base de datos y verificar si el campo realmente necesita un valor predeterminado y, si es así, configurarlo. Y si el valor predeterminado no es necesario, este requisito debe eliminarse para tener una situación limpia.
fuente
Como dijeron otros, esto es causado por el
STRICT_TRANS_TABLES
modo SQL.Para comprobar si el
STRICT_TRANS_TABLES
modo está habilitado:Para deshabilitar el modo estricto:
fuente
Antes de cada acción de inserción, agregué la siguiente línea y resolví mi problema,
No estoy seguro de si esta es la mejor solución,
fuente
Su trabajo y probado Copiar al archivo de configuración: /etc/mysql/my.cnf O /bin/mysql/my.ini
luego reinicia MySQL
fuente
Modifica tu consulta y agrega "IGNORAR" como:
fuente
Para Windows WampServer usuarios de :
WAMP> MySQL> my.ini
archivo de búsqueda para
sql-mode=""
Descomentarlo.
fuente
sql-mode="STRICT_ALL_TABLES,ERROR_FOR_DIVISION_BY_ZERO,NO_ZERO_DATE,NO_ZERO_IN_DATE,NO_AUTO_CREATE_USER"sql-mode="STRICT_ALL_TABLES,ERROR_FOR_DIVISION_BY_ZERO,NO_ZERO_DATE,NO_ZERO_IN_DATE,NO_AUTO_CREATE_USER"
asql-mode=""
. Dejar de comentarsql-mode=""
provocó el error.Esto parece ser causado por un error de larga data (desde 2004) (# 6295) en MySQL , titulado
Supuestamente se corrigió en la versión 5.7.1 de MySQL (Changelog, última entrada) en 2013, haciendo que MySQL se comporte "según el estándar SQL" (ibid).
fuente
NOT NULL
restricción o agregar un valor predeterminado a la columna solucionó el problema. Trigger funciona como se esperaba.En Windows Server, edite my.ini (por ejemplo, archivos de programa \ mysql \ mysql server nn \ my.ini)
Yo no simplemente establecería sql-mode = "", más bien sugiero que uno elimine STRICT_TRANS_TABLES de la línea, deje todo como estaba y luego reinicie MySQL desde la utilidad de servicios. Agrega un comentario para futuros programadores sobre quién eres y qué hiciste.
fuente
configuré los campos en no nulos y el problema se resolvió, se actualiza cuando se ordena que se almacene una información en él, ya no se muestra el mensaje msqli de que el campo estaba vacío porque no insertó un valor en él, la aplicación de esta solución puede funcionar en algunos proyectos depende de la estructura de su proyecto.
fuente
default
atributo de la columna denone
aNULL
. ¡A menos que haya respuestas de alta calificación! mi cPanel me estaba dando acceso denegado en alojamiento compartido cuando intenté actualizar la variable sql_mode.Resolví el problema al cambiar el archivo my.ini ubicado en la carpeta de datos. para mysql 5.6, el archivo my.ini se movió a la carpeta de datos en lugar de la carpeta de instalación bin o mysql.
fuente
Creo que la columna de nombre tiene valores nulos en este caso.
fuente