mysql错误1364字段没有默认值

我的表看起来像

create table try ( name varchar(8), CREATED_BY varchar(40) not null); 

然后我有一个触发器来自动填充CREATED_BY字段

 create trigger autoPopulateAtInsert BEFORE INSERT on try for each row set new.CREATED_BY=user(); 

当我做插入使用

 insert into try (name) values ('abc'); 

该条目是在表中,但我仍然收到错误消息

 Field 'CREATED_BY' doesn't have a default value Error no 1364 

有没有一种方法来压制这个错误,而不使字段为空,而不删除triggfer? 否则,我的hibernate会看到这些exception(即使插入已经完成),然后应用程序将崩溃。

Created_By设置一个默认值(例如:empty VARCHAR ),触发器将更新该值。

这是由STRICT_TRANS_TABLES SQL模式定义的

%PROGRAMDATA%\ MySQL \ MySQL Server 5.6 \ my.ini

文件。 删除该设置并重新启动MySQL应该可以解决问题。

请参阅https://www.farbeyondcode.com/Solution-for-MariaDB-Field–xxx–doesn-t-have-a-default-value-5-2720.html

如果编辑该文件不能解决问题,请参阅http://dev.mysql.com/doc/refman/5.6/en/option-files.html了解其他可能的configuration文件位置。;

打开phpmyadmin并转到“更多”选项卡,然后select“variables”子菜单。 向下滚动以查找sql​​模式。 编辑sql模式并删除“STRICT_TRANS_TABLES”保存。

当我与安装了Homebrew的mysql5.6.20发生同样的问题时,我通过my.cnf解决了这个问题

 nano /usr/local/Cellar/mysql/5.6.20_1/my.cnf 

find如下所示的行:

 sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES 

上面注释掉,重启mysql服务器

 mysql.server restart 

错误消失了!

在phpmyadmin中,执行以下操作:

 select @@GLOBAL.sql_mode 

就我而言,我得到以下几点:

 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 

复制这个结果并删除STRICT_TRANS_TABLES 。 然后执行以下操作:

 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' 

其工作和testing复制到configuration文件:/etc/mysql/my.cnf或/bin/mysql/my.ini

 [mysqld] port = 3306 sql-mode="" 

然后重新启动MySQL

这似乎是由MySQL中 长期以来 (自2004年以来)的错误(#6295)引起的

触发器不处理NOT NULL列

据称,它在2013年被MySQL(Changelog,last entry)版本5.7.1修复,使得MySQL的行为像“按照SQL标准”(同上)。

对于Windows WampServer用户:

WAMP> MySQL> my.ini

search文件的sql-mode=""

取消注释。

在每一个插入行动之前,我在下面添加并解决了我的问题,

 SET SQL_MODE = ''; 

我不确定这是否是最好的解决scheme,

 SET SQL_MODE = ''; INSERT INTO `mytable` ( `field1` , `field2`) VALUES ('value1', 'value2'); 

我设置字段不为空,问题解决了,当信息被命令存储在它时更新,没有更多的显示msqli消息,该字段是空的,因为你没有插入值,这个解决scheme的应用程序可以在一些项目取决于你的项目结构。