MySQL日期函数需严格语法:NOW()、CURDATE()、CURTIME()不带参数且括号不可省;DATE_FORMAT()格式符以%开头,如%Y、%m;UNIX_TIMESTAMP()默认秒级,微秒需NOW(6);NOW()返回语句开始时间,SYSDATE()返回实时时间。

MySQL 日期函数怎么写才不报错
直接用 NOW()、CURDATE()、CURTIME() 就行,它们不带参数,括号不能省。常见错误是写成 NOW(漏括号)或 NOW() 加引号变成字符串,MySQL 会报 FUNCTION xxx does not exist 或隐式类型转换出错。
-
NOW()返回YYYY-MM-DD HH:MM:SS格式的当前时间戳(含秒) -
CURDATE()只返回日期部分,等价于DATE(NOW()) -
CURTIME()只返回时间部分,等价于TIME(NOW()) - 所有函数都基于服务器系统时区,不是客户端本地时间
DATE_FORMAT() 格式化字符串怎么配对
DATE_FORMAT() 是 MySQL 里最常用也最容易写错的格式化函数:第二个参数必须是格式字符串,且所有占位符都以 % 开头,不能用 yyyy-MM-dd 这类 Java 风格写法。
-
%Y:4 位年份(如2024),%y是 2 位(24) -
%m:补零月份数字(01–12),%c不补零(1–12) -
%d:补零日期(01–31),%e不补零 -
%H:24 小时制小时(00–23),%h或%I是 12 小时制(01–12) - 常见误写:
%MM(多一个 M)、%DD、把%s当秒(其实是%s表示秒,但%S也合法;注意%s在某些旧版本有歧义,建议统一用%S)
SELECT DATE_FORMAT(NOW(), '%Y-%m-%d %H:%i:%S'); -- 正确:2024-06-15 14:23:05 SELECT DATE_FORMAT(NOW(), '%y/%c/%e %h:%i %p'); -- 正确:24/6/15 02:23 PM
UNIX_TIMESTAMP 和 FROM_UNIXTIME 怎么互转不丢精度
UNIX_TIMESTAMP() 默认返回整数秒级时间戳,但传入 DATETIME 值时,如果原字段含微秒(如 2024-06-15 10:20:30.123456),默认会截断——除非显式指定精度。
本书全面介绍PHP脚本语言和MySOL数据库这两种目前最流行的开源软件,主要包括PHP和MySQL基本概念、PHP扩展与应用库、日期和时间功能、PHP数据对象扩展、PHP的mysqli扩展、MySQL 5的存储例程、解发器和视图等。本书帮助读者学习PHP编程语言和MySQL数据库服务器的最佳实践,了解如何创建数据库驱动的动态Web应用程序。
-
UNIX_TIMESTAMP(NOW(6))才能返回带微秒的浮点数(如1718446830.123456) -
FROM_UNIXTIME(1718446830.123456)能还原为2024-06-15 10:20:30.123456,但注意:MySQL 5.6.4+ 才支持微秒,低版本会静默丢弃小数部分 - 直接对
TIMESTAMP字段调用UNIX_TIMESTAMP(col)是安全的,它自动按字段精度处理 - 别用
UNIX_TIMESTAMP('2024-06-15')这种字符串输入——依赖系统默认时区和日期解析规则,易出错;优先用STR_TO_DATE()先转成日期再算
为什么 NOW() 和 SYSDATE() 结果有时不一样
这是 MySQL 特有的行为差异点,很多人在事务或函数中踩坑。简单说:NOW() 返回语句开始执行的时间点,而 SYSDATE() 返回函数实际执行的实时时间。
- 在一条语句里多次调用
NOW(),值始终一致;SYSDATE()每次可能不同(尤其在 sleep 后) - 在存储过程或触发器中,如果语句执行耗时长,
SYSDATE()更反映“此刻”,NOW()更适合做逻辑一致性快照 - 复制场景下,
NOW()是确定性函数(可被 binlog 安全记录),SYSDATE()默认是非确定性的,主从可能不一致——除非显式设置SET TIMESTAMP = xxx或启用sysdate-is-now=ON
SELECT NOW(), SLEEP(2), NOW(), SYSDATE(), SLEEP(2), SYSDATE(); -- 结果类似:2024-06-15 10:00:00 | 0 | 2024-06-15 10:00:00 | 2024-06-15 10:00:02 | 0 | 2024-06-15 10:00:04
微秒精度、时区上下文、格式字符串大小写敏感、以及 NOW() 与 SYSDATE() 的语义区别,这几个地方最容易在上线后暴露问题。









