我通过笔记本电脑在本地工作。我有一个名为blog
的表格,其中包含字段post_id
,title
,markdown
,author
,added
和{{1} }。
添加和修改的字段都是DATETIME。
当用户发布博客文章时,PHP会成功运行此查询:modified
我已经进入了phpMyAdmin并使用工作结果运行完全相同的查询。
现在,我今天将我的确切数据库导出到服务器中,我注意到数据库中没有存储任何帖子,所以我尝试通过phpMyAdmin的SQL运行它,它给了我错误INSERT INTO blog (title, author, markdown, added) VALUES ('BLA', 'BLA', 'BLA', NOW())
。
为什么会这样?在我的数据库中,两者的默认值都是Field 'modified' doesn't have a default value
,因此我对可能导致此问题的原因感到困惑。
我的笔记本电脑有PHP 5.3.1和MySQL 5.1.41(我安装了XAMPP。) 服务器有PHP 5.3.5和MySQL 5.5.8(出于绝望,我安装了最新版本。服务器最初运行的是MySQL 5.1和PHP的较低版本。)
这已经杀了我,希望有人知道这有什么问题或如何解决它。
修改:以下是None
结果。
笔记本:
SHOW CREATE TABLE blog
服务器:
| blog | CREATE TABLE `blog` (
`post_id` mediumint(9) NOT NULL AUTO_INCREMENT,
`title` varchar(160) NOT NULL,
`author` varchar(100) NOT NULL,
`markdown` longtext NOT NULL,
`added` datetime NOT NULL,
`modified` datetime NOT NULL,
PRIMARY KEY (`post_id`)
) ENGINE=MyISAM AUTO_INCREMENT=7 DEFAULT CHARSET=latin1 |
由于我的测试,自动增量不同。
答案 0 :(得分:3)
ALTER TABLE blog CHANGE modified modified TIMESTAMP DEFAULT CURRENT_TIMESTAMP;
或者,更少见的是,您的服务器上可能有buggy版本的MySQL。
* 我的语法可能不完整,我在手册页底部的ALTER TABLE上提到了最后一条评论。
答案 1 :(得分:1)
首先:您确定笔记本电脑上的数据与服务器上的数据完全相同吗?也许你没有在你的笔记本电脑上出现这个错误,因为默认值是以某种方式设置在你的笔记本电脑桌上,而不是服务器 - 可能是导出数据的方式的问题。
当你说,默认为“无”你的意思是NULL,或者你的意思是字面意思是“无”?
如果两个字段都是日期时间字段,则将默认值设置为NOW(),或者,如果您希望默认情况下不具有实际日期和时间,请使用类似“0000-00-00 00:00:00”的字符串,或JDBC友好的“0001-01-01 00:00:00”。
将每个表的结构与mysqlclient中的以下命令进行比较:
SHOW CREATE TABLE blog;
答案 2 :(得分:0)
使用
从两个版本转储DDL$ mysqldump --no-data dabasename
并比较它们(并检查 mysqldump(1)的手册页,因为我在这里通过内存飞行。)
确保您使用的是相同的表格描述,并且两个版本都使用相同的引擎。