如何设置MySQL Datetime列的默认值?
在SQL Server中是getdate()。MySQL的等价物是什么?我使用MySQL 5。X,如果它是因式。
如何设置MySQL Datetime列的默认值?
在SQL Server中是getdate()。MySQL的等价物是什么?我使用MySQL 5。X,如果它是因式。
当前回答
这确实是个可怕的消息。这里有一个长期悬而未决的bug/特性请求。该讨论还讨论了时间戳数据类型的限制。
我真的很想知道实现这个东西有什么问题。
其他回答
你可以使用触发器来做这类事情。
CREATE TABLE `MyTable` (
`MyTable_ID` int UNSIGNED NOT NULL AUTO_INCREMENT ,
`MyData` varchar(10) NOT NULL ,
`CreationDate` datetime NULL ,
`UpdateDate` datetime NULL ,
PRIMARY KEY (`MyTable_ID`)
)
;
CREATE TRIGGER `MyTable_INSERT` BEFORE INSERT ON `MyTable`
FOR EACH ROW BEGIN
-- Set the creation date
SET new.CreationDate = now();
-- Set the udpate date
Set new.UpdateDate = now();
END;
CREATE TRIGGER `MyTable_UPDATE` BEFORE UPDATE ON `MyTable`
FOR EACH ROW BEGIN
-- Set the udpate date
Set new.UpdateDate = now();
END;
在版本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
CREATE TABLE `testtable` (
`id` INT(10) NULL DEFAULT NULL,
`colname` DATETIME NULL DEFAULT '1999-12-12 12:12:12'
)
在上面的查询中创建'testtable',我使用'1999-12-12 12:12:12'作为DATETIME列colname的默认值
可以解析默认时间戳。首先考虑你使用的字符集,例如,如果你使用utf8,这个字符集支持所有语言,如果你使用laten1,这个字符集只支持英语。下一步,如果您在任何项目下工作,您应该知道客户端时区,并选择您所在的客户端时区。此步骤是强制执行的。
与MySQL 8.x工作良好
CREATE TABLE `users` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`dateCreated` datetime DEFAULT CURRENT_TIMESTAMP,
`dateUpdated` datetime DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
PRIMARY KEY (`id`),
UNIQUE KEY `mobile_UNIQUE` (`mobile`)
) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;