Error de MySQL 1364 El campo no tiene valores predeterminados

Resuelto kk1957 asked hace 11 años • 21 respuestas

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á.

kk1957 avatar Mar 16 '13 00:03 kk1957
Aceptado

Esto se debe al STRICT_TRANS_TABLESmodo 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.

Phyxx avatar May 29 '2013 05:05 Phyxx

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.

Nilesh Dhangare avatar Oct 19 '2014 15:10 Nilesh Dhangare

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'
Kamil avatar Aug 26 '2016 07:08 Kamil

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
);
KinSlayerUY avatar Mar 15 '2013 17:03 KinSlayerUY