MySQL 5.7如何为VARCHAR列设置默认值为当前时间戳
在MySQL 5.7中给VARCHAR列设置当前时间戳默认值的方法
直接用CURRENT_TIMESTAMP作为VARCHAR列的默认值是行不通的,因为MySQL 5.7仅允许TIMESTAMP或DATETIME类型列直接使用该函数作为默认值。要实现VARCHAR列默认存储当前时间戳,有两种可行方案:
方案1:使用触发器
创建表后,通过BEFORE INSERT触发器自动给VARCHAR列赋值当前时间戳:
-- 先创建表,不设置默认值 CREATE TABLE foo ( creation_time VARCHAR(100), col1 VARCHAR(100) ); -- 创建触发器 DELIMITER // CREATE TRIGGER set_creation_time BEFORE INSERT ON foo FOR EACH ROW BEGIN SET NEW.creation_time = CURRENT_TIMESTAMP(); END // DELIMITER ;
每次插入数据时,如果未指定creation_time的值,触发器会自动将其设为当前时间戳的字符串形式。
方案2:修改列类型为TIMESTAMP(推荐)
如果业务允许,直接将列类型改为TIMESTAMP是更符合MySQL设计规范的做法,既能直接设置默认值,又能自动维护时间:
CREATE TABLE foo ( creation_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP, col1 VARCHAR(100) );
这种方式无需额外触发器,性能更优,且时间存储格式更规范,便于后续的时间查询和计算。
内容的提问来源于stack exchange,提问作者Mahmood Sanjrani
相关产品推荐
相关产品推荐

