【问题标题】:Database Schema, Default Value is NOW()数据库模式,默认值为 NOW()
【发布时间】:2011-07-16 09:52:08
【问题描述】:

我有用户的数据库架构。好像……

CREATE TABLE `users` (

`id` int( 8 ) unsigned AUTO_INCREMENT,
`username` varchar( 255 ),
`password` varchar( 40 ),
`level` tinyint( 1 ) unsigned DEFAULT 1,
`time` datetime DEFAULT NOW(),
`email` varchar( 255 ),

PRIMARY KEY (`id`)

) ENGINE=InnoDB;

有六个字段:id用户名密码级别时间 em>、email,但我只想插入其中三个 - 当用户注册时:usernamepasswordemail。其余的将具有默认值。

问题是 MySQL 抛出错误:#1067 - 'time' 的默认值无效。有什么想法吗,伙计们?

【问题讨论】:

    标签: mysql datetime time mysql-error-1067


    【解决方案1】:

    当我的属性为“datetime”时,我们无法设置“DEFAULT CURRENT_TIMESTAMP”,因此我们将属性更改为“TIMESTAMP”,例如:

    time * 日期时间* 默认 CURRENT_TIMESTAMP,

    should be...
    

    time TIMESTAMP 默认 CURRENT_TIMESTAMP,

    【讨论】:

      【解决方案2】:

      一般来说,MySQL 不支持函数作为默认值。据我所知,只有一个例外:您可以将CURRENT_TIMESTAMP 分配给TIMESTAMP 列。因此,您需要更改列类型(注意 TIMESTAMP 不如 DATETIME 强大)或依靠触发器来填充值。

      【讨论】:

        【解决方案3】:

        您需要使用TimeStamp 而不是DateTime

        `time` TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
        

        【讨论】:

          【解决方案4】:

          使用 CURRENT_TIMESTAMP,并将列更改为时间戳。

          它的作用相同,但有效(只要您可以使用时间戳)- 这是一个限制。

          讨论:

          1. http://bugs.mysql.com/bug.php?id=27645
          2. http://forums.mysql.com/read.php?61,67640,67771#msg-67771

          所以你的创造变成了

          CREATE TABLE `users` (
          `id` int( 8 ) unsigned AUTO_INCREMENT,
          `username` varchar( 255 ),
          `password` varchar( 40 ),
          `level` tinyint( 1 ) unsigned DEFAULT 1,
          `time` timestamp DEFAULT CURRENT_TIMESTAMP,
          `email` varchar( 255 ),
          PRIMARY KEY (`id`)
          ) ENGINE=InnoDB;
          

          【讨论】:

            猜你喜欢
            • 2010-09-17
            • 2011-05-13
            • 2019-02-15
            • 2011-08-14
            • 2014-02-19
            • 2014-07-15
            • 2017-04-30
            • 2019-05-02
            相关资源
            最近更新 更多