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应该可以解决问题。
如果编辑该文件不能解决问题,请参阅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的应用程序可以在一些项目取决于你的项目结构。