不同mysql服务器版本的默认值


default values for different mysql server version

我有一个php项目,在这个项目中我使用了一个自制的mysqli扩展包装器。它适用于selectupdatedelete语句,但不适用于insert

例如,我有一个包含三个字段的表——id、name、姓氏。插入查询如下所示:

$add = new SqlQuery();
$add->addField('id', 1);
$add->addField('name', 'Alex');
$add->execute();

并且它总是失败,因为sql server没有surname字段的默认值
但由于一些神秘的原因,此代码在生产服务器上工作。

不同mysql服务器版本的默认值设置有什么不同吗
或者,有没有任何选项或参数,我如何管理mysql服务器的这种行为?

您可以为姓氏字段指定默认值,也可以自己插入占位符值。

否则,insert语句在MySQL端总是会失败。如果真的没有指定默认值,我不知道为什么它会在你的生产服务器上工作,但在我看来,无论如何,在你的数据中留下这样的漏洞都是不好的做法。

因此,即使用户没有提供或没有指定您应该存储的特定数据,我也建议您自己选择默认占位符——无论是纯NULL值还是空字符串或其他什么,但如果设置正确,以后处理数据会更容易。

这是数据库配置。属性sql_mode,更确切地说是-strict_trans_tables或strict_all_tables。若启用了这些选项中的任何一个,则在这种情况下,数据库将抛出错误(查看问题(,并在禁用选项时发出警告。

有参考http://dev.mysql.com/doc/refman/5.7/en/sql-mode.html#sqlmode_strict_trans_tables