如何设置MySQL Datetime列的默认值?

在SQL Server中是getdate()。MySQL的等价物是什么?我使用MySQL 5。X,如果它是因式。


当前回答

这确实是个可怕的消息。这里有一个长期悬而未决的bug/特性请求。该讨论还讨论了时间戳数据类型的限制。

我真的很想知道实现这个东西有什么问题。

其他回答

您可以使用now()来设置datetime列的值,但请记住,不能将其用作默认值。

这是我的触发器示例:

/************角色************/ 删除存在' role '的表; 创建表' role ' ( bigint(20) unsigned not null auto_increment date_created datetime, date_deleted datetime, ' name ' varchar(35)不是空的, “描述”文本, 主键(' id_role ') )评论= "; 如果role_date_created存在,删除触发器; 在插入之前创建触发器' role_date_created ' “角色” 对于每一行 新设置。' date_created ' = now();

可以解析默认时间戳。首先考虑你使用的字符集,例如,如果你使用utf8,这个字符集支持所有语言,如果你使用laten1,这个字符集只支持英语。下一步,如果您在任何项目下工作,您应该知道客户端时区,并选择您所在的客户端时区。此步骤是强制执行的。

重要的编辑: 自从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>

注意:如果你定义了一个默认值为CURRENT_TIMESTAMP ON的列,你需要为这个列指定一个ALWAYS值,否则这个值会在更新时自动重置为"now()"。这意味着如果你不想改变这个值,你的UPDATE语句必须包含"[你的列名]=[你的列名]"(或其他值),否则这个值就会变成"now()"。很奇怪,但却是事实。我使用的是5.5.56-MariaDB

MySQL 5.6已经修复了这个问题。

ALTER TABLE mytable CHANGE mydate datetime NOT NULL DEFAULT 'CURRENT_TIMESTAMP'