如何为 MySQL Datetime 列设置默认值?
在 SQL Server 中,它是getdate()
。什么是 MySQL 的等价物?如果这是一个因素,我正在使用 MySQL 5.x.
重要编辑:现在可以通过自MySQL 5.6.5以来的 DATETIME 字段来实现这一点,看看下面的其他帖子 ......
以前的版本不能用 DATETIME 做到这一点......
但你可以用 TIMESTAMP 做到这一点:
mysql> create table test (str varchar(32), ts TIMESTAMP DEFAULT CURRENT_TIMESTAMP);
Query OK, 0 rows affected (0.00 sec)
mysql> desc test;
+-------+-------------+------+-----+-------------------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------+-------------+------+-----+-------------------+-------+
| str | varchar(32) | YES | | NULL | |
| ts | timestamp | NO | | CURRENT_TIMESTAMP | |
+-------+-------------+------+-----+-------------------+-------+
2 rows in set (0.00 sec)
mysql> insert into test (str) values ("demo");
Query OK, 1 row affected (0.00 sec)
mysql> select * from test;
+------+---------------------+
| str | ts |
+------+---------------------+
| demo | 2008-10-03 22:59:52 |
+------+---------------------+
1 row in set (0.00 sec)
mysql>
** CAVEAT:如果您默认定义 CURRENT_TIMESTAMP 为 ON 的列,则需要始终为此列指定值,否则该值将在更新时自动重置为 “now()”。这意味着如果您不希望更改该值,则您的 UPDATE 语句必须包含 “[您的列名] = [您的列名]”(或其他一些值),否则该值将变为 “now()”。很奇怪,但也是如此。我希望这有帮助。我使用的是 5.5.56-MariaDB **
在 5.6.5 版中,可以在 datetime 列上设置默认值,甚至可以创建一个在更新行时更新的列。类型定义:
CREATE TABLE foo (
`creation_time` DATETIME DEFAULT CURRENT_TIMESTAMP,
`modification_time` DATETIME ON UPDATE CURRENT_TIMESTAMP
)
参考: http : //optimize-this.blogspot.com/2012/04/datetime-default-now-finally-available.html
MySQL( 版本 5.6.5 之前 )不允许将函数用于默认的 DateTime 值。 TIMESTAMP 由于其奇怪的行为而不适用,因此不建议用作输入数据。 (请参阅MySQL 数据类型默认值 。)
也就是说,您可以通过创建触发器来实现此目的。
我有一个 DateTime 类型的 DateCreated 字段的表。我在该表 “Before Insert” 和 “ SET NEW.DateCreated=NOW()
” 上创建了一个触发器,它工作得很好。
我希望这有助于某人。