Error de MySQL 1364 El campo no tiene valores predeterminados
Mi mesa se parece
create table try ( name varchar(8), CREATED_BY varchar(40) not null);
y luego tengo un activador para completar automáticamente el campo CREADO_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 realizó en la tabla pero todavía aparece 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 activador? De lo contrario, mi hibernación verá estas excepciones (aunque se hayan realizado las inserciones) y luego la aplicación fallará.
Esto se debe al STRICT_TRANS_TABLES
modo SQL definido en el
%PROGRAMDATA%\MySQL\MySQL Server 5.6\my.ini
archivo. Eliminar esa configuración y reiniciar MySQL debería solucionar el problema.
Consulte 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.
Abra phpmyadmin, 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.
En phpmyadmin, realice lo siguiente:
select @@GLOBAL.sql_mode
En mi caso me sale 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 elimínelo 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, vacío VARCHAR
) y el activador actualizará el valor de todos modos.
create table try (
name varchar(8),
CREATED_BY varchar(40) DEFAULT '' not null
);