为什么某些MySQL字段现在需要默认值


Why do certain MySQL fields want a default value now?

我正在为一家公司将一个系统从旧服务器复制到新服务器,我没有参与以前系统的开发。他们有一个当前(复杂)的网页,可以将记录插入数据库,我对此并不完全理解。然而,每个页面的代码和数据库设置完全相同。当我尝试插入一个未完成的表单(在我的版本中)时,我会得到Field 'invoiceNo' doesn't have a default value,而在以前的系统中提交相同的未完成表单将创建(不完整的)数据。

我已经检查了罪魁祸首字段的设置,它被设置为Not Null,默认值为"Null"。两个数据库的设置是相同的,那么为什么相同的插入数据会被区别对待呢?

旧MySQL版本:5.0.41-community-nt

MySQL新版本:5.5.20

旧MySQL管理版本:1.2.12

MySQL管理新版本:1.2.17

很抱歉,如果听起来我不太清楚自己在说什么——事实上,我不知道,因为旧的系统对我来说是陌生的,而且它庞大而复杂。不过可以回答任何问题。

可能是新服务器设置为"严格",或者在他们引入新版本时导致了向后兼容性中断。

然而,您的问题是,该字段应为"not null",而您提供的是null(即没有为其提供设置所需的数据)。如果您将该字段更改为默认值"0",则null字段将默认值为0,并且应按预期添加数据。(但是,如果字段期望"not null",则不应该提交"null",所以在使用默认值=0对其进行黑客攻击之前,我会先查看路由原因!)