我有一个问题,但我不知道问题出在哪里。在本地系统上,php 和 mysql 一切运行正常,但在实时服务器上,我收到来自 mysql 的错误,提示某些列没有默认值。
我知道我应该插入列的默认值或在表模式中设置适当的定义。但有人知道是什么 mysql 配置导致了这个问题吗?所以我可以在本地配置上进行更改以采用这种方法并得到像生产服务器那样的错误。
经过几天的时间,我做了一个测试。我在本地和服务器上运行这个脚本。
<?php
mysql_connect('localhost','*****','*****') or die(mysql_error());
mysql_select_db('****') or die(mysql_error());
var_dump(mysql_query('INSERT INTO `advertise` set name_en=\'\'') or die(mysql_error()));
?>
在当地它的回声boolean true
在服务器上它的回声Field 'name_ar' doesn't have a default value
这是我从 phpmyadmin 导出的表架构
--
-- Table structure for table `advertise`
--
CREATE TABLE IF NOT EXISTS `advertise` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`uid` varchar(255) NOT NULL,
`name_en` varchar(255) NOT NULL,
`name_ar` varchar(255) NOT NULL,
`content` varchar(255) NOT NULL,
`type` int(11) NOT NULL,
`size` varchar(255) NOT NULL,
`impressions` int(11) NOT NULL DEFAULT '0',
`impression_limit` int(11) NOT NULL DEFAULT '0',
`link` varchar(255) NOT NULL DEFAULT '',
`status` int(11) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=16 ;
当我看到插入记录的列时,我看到它是空白的。我面临这个问题。像 uid、name_ar 这样的列和像“not null”这样的列给我带来了问题。
答案1
您需要按照@Maz 的建议更改 sql_mode。将其值设置为严格所有表。
答案2
这主要发生在 Windows 系统中。如果您在基于 Unix 的系统上进行开发并在 Windows 环境中部署,就会发生这种情况。我只是假设您的开发和实时服务器位于不同的操作系统中。
你可能正在寻找sql_mode