4

我将带有工作台的 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

4 回答 4

1

尝试

SELECT FROM_UNIXTIME(1);

如果您的系统在 UTC 以外的另一个时区运行,那么您将不会得到 '1970-01-01 00:00:01' 结果。例如,我的系统在 CET 中运行,结果为“1970-01-01 01:00:01”。所以这个结果应该作为你的表的默认值。

于 2015-03-01T20:11:19.800 回答
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';`
于 2015-03-02T10:15:37.790 回答
0

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。

于 2015-03-01T19:16:26.797 回答
0

在 5.7 上,您希望禁用TRADITIONALinsql_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_modemy.cf文件中设置或使用命令行来执行此操作,如下所示:

SET sql_mode='ALLOW_INVALID_DATES';

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

于 2015-12-22T06:18:02.810 回答