相关疑难解决方法(0)

timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP在一台机器上可以为null,但在另一台机器上不能为空?

我有一个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值.

mysql

12
推荐指数
1
解决办法
5515
查看次数

MYSQL:如何在插入期间使NULL或空数据默认为0

所以这看起来很简单,我发誓我以前做过这个,但由于某种原因它只是不适合我.

我正在使用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.

我在这里错过了什么吗?我需要写一些触发器吗?如果我不需要,我不想在将其放入数据库之前擦除脚本中的数据.

mysql sql database mamp phpmyadmin

9
推荐指数
2
解决办法
2万
查看次数

标签 统计

mysql ×2

database ×1

mamp ×1

phpmyadmin ×1

sql ×1