mysql create_date_mysql - “create_date”时间戳字段的默认值无效

mysql - “create_date”时间戳字段的默认值无效

我有以下sql create语句

mysql> CREATE TABLE IF NOT EXISTS `erp`.`je_menus` (

-> `id` INT(11) NOT NULL AUTO_INCREMENT ,

-> `name` VARCHAR(100) NOT NULL ,

-> `description` VARCHAR(255) NOT NULL ,

-> `live_start_date` DATETIME NULL DEFAULT NULL ,

-> `live_end_date` DATETIME NULL DEFAULT NULL ,

-> `notes` VARCHAR(255) NULL ,

-> `create_date` TIMESTAMP NOT NULL DEFAULT '0000-00-00 00:00:00',

-> `created_by` INT(11) NOT NULL ,

-> `update_date` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ,

-> `updated_by` INT(11) NOT NULL ,

-> `status` VARCHAR(45) NOT NULL ,

-> PRIMARY KEY (`id`) )

-> ENGINE = InnoDB;

给出以下错误

ERROR 1067 (42000): Invalid default value for 'create_date'

这里有什么错误?

robert asked 2019-05-20T07:31:14Z

12个解决方案

139 votes

那是因为服务器SQL模式 - NO_ZERO_DATE。

来自参考:NO_ZERO_DATE - 在严格模式下,不允许'0000-00-00'作为有效日期。 您仍然可以使用IGNORE选项插入零日期。 如果不是严格模式,则接受日期,但会生成警告。

Devart answered 2019-05-20T07:31:34Z

103 votes

如果您从MySQL工作台生成脚本。

生成以下行

SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='TRADITIONAL,ALLOW_INVALID_DATES';

从SQL_MODE中删除TRADITIONAL,然后脚本应该正常工作

否则,您可以将SQL_MODE设置为允许无效日期

SET SQL_MODE='ALLOW_INVALID_DATES';

Pankaj Shrestha answered 2019-05-20T07:32:20Z

35 votes

TIMESTAMP的范围为'1970-01-01 00:00:01'UTC到'2038-01-19 03:14:07'UTC(参见doc)。 默认值必须在该范围内。

其他奇怪的,相关的行为:

CREATE TABLE tbl1 (

ts TIMESTAMP);

Query OK, 0 rows affected (0.01 sec)

CREATE TABLE tbl2 (

ts TIMESTAMP,

ts2 TIMESTAMP);

ERROR 1067 (42000): Invalid default value for 'ts2'

CREATE TABLE tbl3 (

ts TIMESTAMP,

ts2 TIMESTAMP DEFAULT '1970-01-01 00:00:01');

Query OK, 0 rows affected (0.01 sec)

旁注,如果要插入NULLS:

CREATE TABLE tbl4 (

ts TIMESTAMP NULL DEFAULT NULL);

Bret VvVv answered 2019-05-20T07:33:01Z

26 votes

在ubuntu桌面16.04中,我这样做了:

在您选择的编辑器中打开文件:sudo service mysql restart。

寻找:sudo service mysql restart,它将在[mysqld]之下。

并将sudo service mysql restart设置为以下内容:

sudo service mysql restart

执行以下操作保存然后重新启动mysql服务:

sudo service mysql restart

Mubashar Abbas answered 2019-05-20T07:34:04Z

8 votes

使用OS X,根据其编译的默认值从Homebrew,System Variables安装mysql。解决方案是从系统变量“sql_mode”中删除“NO_ZERO_DATE”。

请记住,范围涉及到。

如果您只想在会话中受到影响,请使用"@@global",例如:

SET @@session.sql_mode ="ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION".

在这种情况下,一旦您的会话结束或您的更改它将不会影响。 它对其他会话没有影响。

如果您想影响所有客户,请使用"@@global",例如:

SET @@global.sql_mode ="ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION".

在这种情况下,它只会影响更改后连接的客户端(不影响当前所有客户端),并且一旦服务器退出就无法工作。

Joy Zhu answered 2019-05-20T07:35:07Z

8 votes

通过从Homebrew安装MySQL,我能够在OS X上解决这个问题

brew install mysql

将以下内容添加到/usr/local/etc/my.cnf

sql_mode=ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION

并重新启动MySQL

brew tap homebrew/services

brew services restart mysql

dgitman answered 2019-05-20T07:35:47Z

4 votes

我在MySQL 5.7中遇到了类似的问题,代码如下:

`update_date` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP

我通过使用它来修复:

`update_date` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP

pyb answered 2019-05-20T07:36:33Z

4 votes

要避免此问题,您需要从mysql模式配置中删除NO_ZERO_DATE。

转到'phpmyadmin'。

加载phpmyadmin后,单击“变量”选项卡。

搜索'sql模式'。

单击“编辑”选项,然后从配置中删除NO_ZERO_DATE(及其尾随逗号)。

这是使用wamp或xampp的本地环境中的一个非常常见的问题。

Antonio Reyes answered 2019-05-20T07:37:45Z

1 votes

您可能希望检查MySql实例上的时区设置:

mysql> show variables like 'time_zone';

+---------------+--------+

| Variable_name | Value |

+---------------+--------+

| time_zone | SYSTEM |

+---------------+--------+

在我的情况下,我意识到底层系统将其时区设置为BST而不是UTC,因此在创建表中,默认的“1970-01-01 00:00:01”被强制恢复1小时,导致 无效的时间戳值。

对我来说,我实际上希望将机器的时区设置为UTC,然后将我排除在外。 当我运行Centos / 7时,我就是这么做的

# timedatectl set-timezone UTC

并重新启动一切。

Robert Hook answered 2019-05-20T07:38:44Z

1 votes

禁用严格的SQL模式

Create disable_strict_mode.cnf file at /etc/mysql/conf.d/

在文件中,输入以下两行:

[mysqld]

sql_mode=IGNORE_SPACE,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION

最后,使用以下命令重启MySQL:

sudo service mysql restart

Jatin Bhatti answered 2019-05-20T07:39:30Z

0 votes

你可以改变这个:

`create_date` TIMESTAMP NOT NULL DEFAULT '0000-00-00 00:00:00',

对于这样的事情:

`create_date` TIMESTAMP NOT NULL DEFAULT '2018-04-01 12:00:00',

Lucas Bustamante answered 2019-05-20T07:40:06Z

0 votes

默认值应从1000年开始。

例如,

ALTER TABLE mytable last_active DATETIME DEFAULT '1000-01-01 00:00:00'

希望这有助于某人。

David Beckwith answered 2019-05-20T07:40:46Z

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值