明凯博客

关注网站技术,一个特立独行的程序员

MySQL 1364 错误提示:#1364 – Field “details” doesn’t have a default value问题修复

php操作操作mysql,输出mysql错误码和错误描述:

1
2
3
MYSQL mysql;
 
sprintf("errno:%d, error: %s", mysql_errno(&mysql),mysql_error(&mysql));

检查my.cnf里面是否有“STRICT_TRANS_TABLES”,如果有,就是使用了mysql严格模式。

我们来看看sql_mode模式
mysql数据库的中有一个环境变量sql_mode,定义了mysql应该支持的sql语法,数据校验等!

我们可以通过以下方式查看当前数据库使用的sql_mode:

1
2
3
4
5
6
mysql> SELECT @@sql_mode;  
+----------------------------------------------------------------+  
| @@sql_mode                                                     |  
+----------------------------------------------------------------+  
| STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION |  
+----------------------------------------------------------------+

或者通过查看系统变量方式:

1
2
3
4
mysql> SHOW VARIABLES LIKE 'sql_mode%'\G;  
*************************** 1. ROW ***************************  
Variable_name: sql_mode  
        VALUE: STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION

mysql5.0以上版本支持三种sql_mode模式:ANSI、TRADITIONAL和STRICT_TRANS_TABLES。

ANSI模式:宽松模式,对插入数据进行校验,如果不符合定义类型或长度,对数据类型调整或截断保存,报warning警告。
TRADITIONAL模式:严格模式,当向mysql数据库插入数据时,进行数据的严格校验,保证错误数据不能插入,报error错误。用于事物时,会进行事物的回滚。
STRICT_TRANS_TABLES模式:严格模式,进行数据的严格校验,错误数据不能插入,报error错误。

解决办法有两种:

第一种:数据库设计时,为可能没有数据的字段设置默认值。
第二种:设置SQL的模式,此有两种方法:
(1),配置my.ini,去掉:STRICT_TRANS_TABLES 重新启动mysql服务。
(2),运行SQL命令。注:此命令需要权限! SQL代码:

1
SET @@GLOBAL.sql_mode="NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION";

, ,

相关文章

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注