创建具有默认值的表时出现错误。
创建具有默认值的表时出现错误。
使用MySql Workbench 6.3版本6.3.6进行操作。
我试图创建一个带有默认约束的表,但是出现了错误。
以下是脚本:
创建表`Migration_Log2` ( `Id` Int NOT NULL AUTO_INCREMENT, `FilePath` varchar(1000) NOT NULL, `FileName` varchar(100) NOT NULL, `IsSent` bool NOT NULL DEFAULT '0', `CreatedDate` DateTime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, `ModifiedDate` DateTime NOT NULL DEFAULT CURRENT_TIMESTAMP, `SendAttemptMade` int NOT NULL DEFAULT '0', `Message` Text DEFAULT NULL, PRIMARY KEY (`Id`), KEY `migration_log_Id_UNIQUE` (`Id`) ) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;
错误信息
错误代码:1067。'CreatedDate'的默认值无效。0.000秒
创建表时使用默认值时出现错误的原因可能是CURRENT_TIMESTAMP函数返回的时间戳包含微秒级精度。解决方法是在默认值中使用CURRENT_TIMESTAMP(0)来限制返回的时间戳精度为秒。
此外,可能还有其他原因导致错误的发生。首先,可以尝试将CreatedDate列的数据类型从datetime更改为timestamp。其次,尝试将字符集从utf8更改为Latin来进行测试。最后,还应该查看错误消息以获取更多信息。
根据问题描述来看,作者已经尝试了多种方法,包括从用户界面进行操作,但仍无法解决问题。文章中还提到了作者的问题脚本在MySQL 5.6版本中可以正常运行,因此猜测可能是服务器设置中的其他配置导致了错误的发生。
总之,解决该问题的方法是在默认值中使用CURRENT_TIMESTAMP(0)来限制返回的时间戳精度为秒,并检查其他可能的配置差异。
这个问题的出现可能是因为数据库服务器对数据类型检查有一些严格的约束。建议将字段CreatedDate
的类型从datetime
改为timestamp
。我在我的网站的VPS上遇到过类似的问题。
在创建表时使用默认值可能会导致错误。这可能是由于数据库服务器对数据类型检查的严格约束造成的。为了解决这个问题,建议将字段CreatedDate
的类型从datetime
更改为timestamp
。
以下是一个示例代码,展示如何使用默认值创建表:
CREATE TABLE TableName ( Column1 datatype DEFAULT DefaultValue, Column2 datatype DEFAULT DefaultValue, ... );
在上述示例中,TableName
是要创建的表的名称,Column1
和Column2
是要创建的列的名称,datatype
是列的数据类型,DefaultValue
是列的默认值。
注意,如果使用的是MySQL数据库,可能还需要在Column1
和Column2
的定义中添加NOT NULL
约束。
通过更改CreatedDate
字段的数据类型,您可以解决在创建具有默认值的表时出现的错误。将datetime
更改为timestamp
可能会符合数据库服务器对数据类型检查的要求。
总结起来,如果在创建具有默认值的表时出现错误,可能是由于数据库服务器对数据类型检查的严格约束。解决方法是将相关字段的数据类型更改为满足数据库服务器要求的类型。在本例中,将datetime
更改为timestamp
可能是一个解决方法。