我的桌子看起来像
create table try ( name varchar(8), CREATED_BY varchar(40) not null);
Run Code Online (Sandbox Code Playgroud)
然后我有一个触发器来自动填充CREATED_BY字段
create trigger autoPopulateAtInsert BEFORE INSERT on try for each row set new.CREATED_BY=user();
Run Code Online (Sandbox Code Playgroud)
当我使用插入时
insert into try (name) values ('abc');
Run Code Online (Sandbox Code Playgroud)
该条目在表中进行,但我仍然收到错误消息
Field 'CREATED_BY' doesn't have a default value Error no 1364
Run Code Online (Sandbox Code Playgroud)
有没有办法抑制这个错误而不使字段可以为空并且不删除触发器?否则我的hibernate将看到这些异常(即使已经进行了插入),然后应用程序将崩溃.
Phy*_*yxx 193
这是由于在中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以获取配置文件的其他可能位置.
小智 87
打开phpmyadmin并转到'More'Tab并选择'Variables'子菜单.向下滚动以查找sql模式.编辑sql模式并删除'STRICT_TRANS_TABLES'保存它.
Kam*_*mil 36
在phpmyadmin中,执行以下操作:
select @@GLOBAL.sql_mode
Run Code Online (Sandbox Code Playgroud)
就我而言,我得到以下内容:
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
Run Code Online (Sandbox Code Playgroud)
复制此结果并删除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'
Run Code Online (Sandbox Code Playgroud)
Kin*_*mah 29
当我在使用Homebrew安装mysql5.6.20时出现同样的问题时,我通过进入my.cnf解决了这个问题
nano /usr/local/Cellar/mysql/5.6.20_1/my.cnf
Run Code Online (Sandbox Code Playgroud)
找到看起来像这样的行:
sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES
Run Code Online (Sandbox Code Playgroud)
注释上面的行并重新启动mysql服务器
mysql.server restart
Run Code Online (Sandbox Code Playgroud)
错误消失了!
Kin*_*rUY 25
设置Created_By
(例如:空VARCHAR
)的默认值,触发器将反正更新该值.
小智 10
在每次插入操作之前,我在下面添加了行并解决了我的问题
SET SQL_MODE = '';
Run Code Online (Sandbox Code Playgroud)
我不确定这是否是最佳解决方案,
SET SQL_MODE = ''; INSERT INTO `mytable` ( `field1` , `field2`) VALUES ('value1', 'value2');
Run Code Online (Sandbox Code Playgroud)
Dam*_*ica 10
正如其他人所说,这是由STRICT_TRANS_TABLES
SQL模式引起的。
要检查是否STRICT_TRANS_TABLES
启用了模式:
SHOW VARIABLES LIKE 'sql_mode';
Run Code Online (Sandbox Code Playgroud)
要禁用严格模式:
SET GLOBAL sql_mode='';
Run Code Online (Sandbox Code Playgroud)
它的工作和测试复制到配置文件:/etc/mysql/my.cnf OR /bin/mysql/my.ini
[mysqld]
port = 3306
sql-mode=""
Run Code Online (Sandbox Code Playgroud)
然后重启MySQL
小智 7
修改查询并将“ IGNORE”添加为:
INSERT IGNORE INTO `mytable` ( `field1` , `field2`) VALUES ('value1', 'value2');
Run Code Online (Sandbox Code Playgroud)
对于Windows WampServer用户:
WAMP> MySQL> my.ini
搜索文件 sql-mode=""
取消注释.
这似乎是由MySQL 中长期存在的(自2004年以来)错误(#6295)引起的,标题为
NOT NULL列不处理触发器.
据称,它在2013年的MySQL版本5.7.1(更改日志,最后一个条目)中被修复,使得MySQL表现为"按照SQL标准"(同上).
运行mysql控制台:
mysql -u your_username -p
Run Code Online (Sandbox Code Playgroud)
,选择数据库:
USE your_database;
Run Code Online (Sandbox Code Playgroud)
并运行(同样从mysql控制台):
SET GLOBAL sql_mode='';
Run Code Online (Sandbox Code Playgroud)
这将关闭严格模式,并且mysql将不再抱怨。
归档时间: |
|
查看次数: |
331892 次 |
最近记录: |