如何设置MySQL Datetime列的默认值?
在SQL Server中是getdate()。MySQL的等价物是什么?我使用MySQL 5。X,如果它是因式。
如何设置MySQL Datetime列的默认值?
在SQL Server中是getdate()。MySQL的等价物是什么?我使用MySQL 5。X,如果它是因式。
当前回答
对于那些试图在MySQL中设置默认DATETIME值而失去信心的人,我确切地知道你的感受。这就是:
ALTER TABLE `table_name` CHANGE `column_name` DATETIME NOT NULL DEFAULT 0
仔细观察,我没有在0周围添加单引号/双引号
解完这个题,我真的跳了起来,D
其他回答
MySQL(5.6.5版本之前)不允许将函数用于默认的DateTime值。由于其奇怪的行为,TIMESTAMP不适合使用,不建议用作输入数据。(参见MySQL数据类型默认值。)
也就是说,您可以通过创建触发器来实现这一点。
我有一个DateCreated字段类型为DateTime的表。我在那个表上创建了一个触发器“Before Insert”和“SET NEW.DateCreated=NOW()”,它工作得很好。
与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;
对于所有使用TIMESTAMP列作为解决方案的人,我想从手册中提出以下限制:
http://dev.mysql.com/doc/refman/5.0/en/datetime.html
TIMESTAMP数据类型的范围是'1970-01-01 00:00:01' UTC到'2038-01-19 03:14:07' UTC。它具有不同的属性,这取决于MySQL版本和服务器运行的SQL模式。这些属性将在本节后面描述。”
这显然会在28年内破坏你的软件。
我认为数据库方面的唯一解决方案是使用其他答案中提到的触发器。
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的默认值
对于那些试图在MySQL中设置默认DATETIME值而失去信心的人,我确切地知道你的感受。这就是:
ALTER TABLE `table_name` CHANGE `column_name` DATETIME NOT NULL DEFAULT 0
仔细观察,我没有在0周围添加单引号/双引号
解完这个题,我真的跳了起来,D