mysql - strict_trans_tables - general error 1364 laravel
error de mysql 1364 El campo no tiene valores predeterminados (11)
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.
Mi mesa se ve como
create table try ( name varchar(8), CREATED_BY varchar(40) not null);
y luego tengo un disparador para autopoblar 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 está hecha 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 nulable Y sin eliminar el triggfer? De lo contrario, mi hibernación verá estas excepciones (aunque las inserciones se hayan realizado) y la aplicación se bloqueará.
Antes de cada acción de inserción, añadí la línea siguiente y resolví mi problema,
SET SQL_MODE = '''';
No estoy seguro si esta es la mejor solución,
SET SQL_MODE = ''''; INSERT INTO `mytable` ( `field1` , `field2`) VALUES (''value1'', ''value2'');
Cuando tuve el mismo problema con mysql5.6.20 instalado con Homebrew, lo resolví yendo a my.cnf
nano /usr/local/Cellar/mysql/5.6.20_1/my.cnf
Encuentra la línea que se ve así:
sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES
Comenta sobre la salida y reinicia el servidor mysql
mysql.server restart
Error ido!
En phpmyadmin, realice lo siguiente:
select @@GLOBAL.sql_mode
En mi caso, obtengo lo siguiente:
ONLY_FULL_GROUP_BY, STRICT_TRANS_TABLES ,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION
Copie este resultado y elimine STRICT_TRANS_TABLES
. Luego, realice lo siguiente:
set GLOBAL sql_mode=''ONLY_FULL_GROUP_BY,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION''
Establezca un valor predeterminado para Created_By
(por ejemplo: empty VARCHAR
) y el activador actualizará el valor de todos modos.
Esto es causado por el modo SQL STRICT_TRANS_TABLES
definido en
% PROGRAMDATA% / MySQL / MySQL Server 5.6 / my.ini
archivo. Eliminar esa configuración y reiniciar MySQL debería solucionar el problema.
Si la edición de 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.
Esto parece ser causado por un error de larga data (desde 2004) (# 6295) en MySQL , titulado
Los desencadenadores no se procesan para columnas NOT NULL .
Supuestamente se corrigió en la versión 5.7.1 de MySQL (Changelog, última entrada) en 2013, lo que hace que MySQL se comporte como "según el estándar SQL" (ibid).
Modifique su consulta y agregue "IGNORE" como:
INSERT IGNORE INTO `mytable` ( `field1` , `field2`) VALUES (''value1'', ''value2'');
Para usuarios de Windows WampServer :
WAMP> MySQL> my.ini
archivo de búsqueda para sql-mode=""
Descomúnjalo.
Su trabajo y probado Copy to Config File: /etc/mysql/my.cnf OR /bin/mysql/my.ini
[mysqld]
port = 3306
sql-mode=""
luego reinicia MySQL
configuro los campos para que no sean nulos y el problema se resuelva, se actualiza cuando se ordena almacenar una información en él, ya no muestra el mensaje msqli de que el campo estaba vacío porque no le ha insertado ningún valor, la aplicación bien de esta solución puede funcionar en algunos proyectos depende de la estructura de su proyecto.