TIMESTAMP默认值错误

时间:2015-03-01 18:20:25

标签: mysql database phpmyadmin mysql-workbench mysql-error-1067

我将带有workbench的SQL脚本导出到phpMyAdmin,因为TIMESTAMP的默认值而出错。

这是一段代码:

CREATE TABLE IF NOT EXISTS `test`.`is_users` (
  `count` INT(10) UNIQUE NOT NULL AUTO_INCREMENT,
  `active` ENUM('1', '0') NULL DEFAULT 1,
  `id` VARCHAR(36) UNIQUE NOT NULL,
  `created_at` TIMESTAMP NOT NULL DEFAULT '1970-01-01 00:00:01',
  `updated_at` TIMESTAMP NOT NULL DEFAULT '1970-01-01 00:00:01',
  `deleted_at` TIMESTAMP NULL DEFAULT NULL,

我收到错误:

  

#1067 - 'created_at'

的默认值无效

为避免错误,默认日期应为例如1970-01-01 01:01:01,这意味着不能有零。 我怎么能解决这个问题? 感谢。

4 个答案:

答案 0 :(得分:1)

尝试

SELECT FROM_UNIXTIME(1);

如果您的系统运行的时间区域不是UTC,那么您将无法获得' 1970-01-01 00:00:01'结果。例如,我的系统在CET中运行,结果是' 1970-01-01 01:00:01'。因此,此结果应作为表的默认值。

答案 1 :(得分:0)

<00> 00:00:01有效一段时间。

TIMESTAMP DEFAULT处理在5.6.5处更改。你用的是什么版本?见http://dev.mysql.com/doc/refman/5.6/en/timestamp-initialization.html

我在5.6.12中没有收到错误。

解决方案:升级到5.6。

答案 2 :(得分:0)

实际上删除这部分代码就足够了:

 SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0;
 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0;
 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='TRADITIONAL,ALLOW_INVALID_DATES';`

答案 3 :(得分:0)

在5.7上,您要禁用TRADITIONAL中的sql_mode,以便能够在日期时间和时间戳中支持'0000-00-00 00:00:00',或在需要时支持0。 例如,默认情况下为5.7.10,SQL MODES为:

mysql> SELECT @@sql_mode;
+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| @@sql_mode                                                                                                                                                               |
+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| STRICT_TRANS_TABLES,STRICT_ALL_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ALLOW_INVALID_DATES,ERROR_FOR_DIVISION_BY_ZERO,TRADITIONAL,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION |
+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
1 row in set (0.00 sec)

您可以通过在sql_mode文件中设置my.cf或使用以下命令行来执行此操作:

SET sql_mode='ALLOW_INVALID_DATES';

您可能希望保留其他一些模式,您应该查看上面链接的文档。这非常棘手,因为有些模式依赖于其他模式。