我有一个MySql表,其字段定义为:
`created` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP
Run Code Online (Sandbox Code Playgroud)
在我的本地机器上,我可以运行:
INSERT INTO mytbl (id, user_id, created) VALUES(88882341234, 765, null);
SELECT id, user_id, created FROM mytbl WHERE id = '88882341234';
Run Code Online (Sandbox Code Playgroud)
然后'创建'将显示类似'2014-06-13 21:16:42'的内容.
但是在我的登台服务器上,如果我运行相同的查询,我会收到此错误:
Column 'created' cannot be null.
Run Code Online (Sandbox Code Playgroud)
这些表的模式是相同的(跨本地和分段),我通过mysqldump确保(在运行此测试之前克隆表).
我在两台机器上运行MySql 5.6.17.我也确保两者都有相同的sql_mode.
可能是什么问题呢?
PS对于那些不知道我为什么要将不可空字段的值设置为null的人,MySql Docs说:
此外,您可以通过为任何TIMESTAMP列分配NULL值来初始化或更新任何TIMESTAMP列,除非已使用NULL属性定义允许NULL值.
所以这看起来很简单,我发誓我以前做过这个,但由于某种原因它只是不适合我.
我正在使用MAMP并拥有一个包含大约200列的表,如果将NULL或空数据插入其中,我希望其中大约20个默认为0.
这是我的表格的一个小例子,以及我为默认为0的列所做的事情.
CREATE TABLE `listings` (
`ListingID` int(11) NOT NULL,
`BathsFull` int(6) NOT NULL DEFAULT '0',
PRIMARY KEY (`ListingID`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
Run Code Online (Sandbox Code Playgroud)
所以请注意BathsFull我设置NOT NULL DEFAULT '0'的问题是,当空数据传递给它时,我得到一个SQL错误SQLSTATE[23000]: Integrity constraint violation: 1048 Column 'BathsFull' cannot be null.
我也试过BathsFull acceptsNULL andDEFAULT'0',但是当传递空数据时,表显示NULL而不是0.
我在这里错过了什么吗?我需要写一些触发器吗?如果我不需要,我不想在将其放入数据库之前擦除脚本中的数据.