Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/28.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
mysql列中的时间戳_Mysql_Linux_Amazon Ec2_Timestamp - Fatal编程技术网

mysql列中的时间戳

mysql列中的时间戳,mysql,linux,amazon-ec2,timestamp,Mysql,Linux,Amazon Ec2,Timestamp,我正在将数据库上载到MySQL,遇到了以下问题: 第31行出现错误1293(HY000):表格定义不正确;在DEFAULT或ON UPDATE子句中,只有一个TIMESTAMP列具有当前的_TIMESTAMP 问题是,在该表中有两个数据类型为“Timestamp”的列,只有一个列应该有“Current Timestamp”值,而另一个默认值为“null”。当我上传数据库时,两列的值都被更改为“Current Timestamp”,这使得导出和导入的过程非常烦人,因为我必须在再次导入之前手动将其更

我正在将数据库上载到MySQL,遇到了以下问题:

第31行出现错误1293(HY000):表格定义不正确;在DEFAULT或ON UPDATE子句中,只有一个TIMESTAMP列具有当前的_TIMESTAMP

问题是,在该表中有两个数据类型为“Timestamp”的列,只有一个列应该有“Current Timestamp”值,而另一个默认值为“null”。当我上传数据库时,两列的值都被更改为“Current Timestamp”,这使得导出和导入的过程非常烦人,因为我必须在再次导入之前手动将其更改回null

知道为什么它会自动变为“当前时间戳”吗?这是一个AmazonEC2Linux实例(参见所附的mysql版本)


在5.6版之前,MySQL在声明时间戳列时做了一个假设。。。具体地说,它假定表上的第一个时间戳列将是具有自动更新属性的列

如果没有显式禁用第一个时间戳上的行为,则隐式启用该行为,这将导致拒绝稍后时间戳上的显式自动值。不问是不够的

它不必是自动初始化或更新为当前时间戳的表中的第一个
时间戳
列。但是,要为不同的
时间戳
列指定自动初始化或更新,必须抑制第一列的自动属性。然后,对于另一个
TIMESTAMP
列,
DEFAULT
ON UPDATE
子句的规则与第一个
TIMESTAMP
列的规则相同,只是如果省略这两个子句,则不会发生自动初始化或更新

要抑制第一列时间戳的自动属性,请执行以下操作之一:

使用指定常量默认值的
DEFAULT
子句定义列

指定
NULL
属性。这还会导致列允许
NULL
值,这意味着您无法通过将列设置为
NULL
来分配当前时间戳。分配
NULL
将列设置为
NULL

-

因此,对于您的第一个时间戳——如果它不是您想要成为自动时间戳的时间戳——使用以下列类型声明之一(它们是相同的):

这将允许您在系统之间复制此表定义,而不会出现问题


MySQL服务器5.6修复了这种愚蠢的行为,其中系统变量禁用表中第一个时间戳的隐式自动行为

如果在未设置此选项的情况下启动运行5.6的服务器,则会在错误日志中写入警告

[Warning] TIMESTAMP with implicit DEFAULT value is deprecated. Please 
use --explicit_defaults_for_timestamp server option (see documentation 
for more details).

警告提醒您仍然存在旧行为,这在5.6中已被弃用。

当我上载数据库时,两列的值都更改为“当前时间戳”,这没有意义。当你“上传”数据库时,它们被改变是什么意思?是否涉及多台服务器?如果您希望时间戳不自动,则需要将其声明为
timestamp NULL DEFAULT NULL
(不是
timestamp DEFAULT NULL
),但现在还不清楚您在问什么。感谢您的回答@Michael sqlbot…抱歉,我不清楚…我有两列设置为时间戳,并且只有一个将当前_时间戳作为默认值。当我导入数据库时(我在两个独立的服务器中复制了它),我得到了错误,即使其中一个默认为null…以下列:
creationDatetime
timestamp NOT null,
lastModification
timestamp NOT null default CURRENT\u timestamp ON UPDATE CURRENT\u timestamp,…错误为:#1293-表定义不正确;只有一个时间戳列的当前时间戳为默认值或更新clausePerfect@Michael sqlbot…我有两个时间戳,第一个默认为空值,第二个默认为当前时间戳…我只是颠倒了两者的顺序,工作得很好…谢谢!!
[Warning] TIMESTAMP with implicit DEFAULT value is deprecated. Please 
use --explicit_defaults_for_timestamp server option (see documentation 
for more details).