mysql列中的时间戳
我正在将数据库上载到MySQL,遇到了以下问题: 第31行出现错误1293(HY000):表格定义不正确;在DEFAULT或ON UPDATE子句中,只有一个TIMESTAMP列具有当前的_TIMESTAMP 问题是,在该表中有两个数据类型为“Timestamp”的列,只有一个列应该有“Current Timestamp”值,而另一个默认值为“null”。当我上传数据库时,两列的值都被更改为“Current Timestamp”,这使得导出和导入的过程非常烦人,因为我必须在再次导入之前手动将其更改回null 知道为什么它会自动变为“当前时间戳”吗?这是一个AmazonEC2Linux实例(参见所附的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”,这使得导出和导入的过程非常烦人,因为我必须在再次导入之前手动将其更
在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).