刚刚继承了一个充满错误的网站,但在日期和事物出现/消失的时间方面存在一些问题。
有很多 SQL 语句在使用CURRENT_DATE
,我相信这可能是一个问题。
是否有其他人知道使用CURRENT_DATE
over 的性能有任何不准确性,比如 PHP 派生的日期字符串,例如date('Y-m-d H:j',time())
日期比较有几种方法可能出错。它们都与 CURRENT_DATE 没有任何关系,CURRENT_DATE 具有标准、定义明确、一致的行为。
首先,php通常在web服务器上执行;CURRENT_DATE 在数据库服务器上执行。有时 Web 服务器和数据库服务器是同一台机器,但有时它们不是。两个不同的服务器可能使用不匹配的时钟运行。并且至少从理论上讲,Web 服务器和数据库服务器可能位于(或设置为)两个不同的时区。我自己从未见过服务器以这种方式设置,但这是可能的。
其次,您的 PHP 表达式以时间戳的形式(不是日期的形式)返回一个字符串(不是日期)。CURRENT_DATE 返回一个日期。它们不是相同的数据类型。仔细比较它们的值。大多数开发人员最初都希望表达式 likeCURRENT_DATE between CURRENT_TIMESTAMP and (CURRENT_DATE + 1)
为真,但事实并非如此。CURRENT_DATE 将被转换为类型时间戳(MySQL 中的 DateTime),然后与 CURRENT_TIMESTAMP 进行比较。当它被转换为类型时间戳时,它将是'2013-08-22 00:00:00'。
第三,在 PHP 中可能有一个格式字符串,它在一个语言环境中为您提供合理排序的值,而在另一个语言环境中为您提供不同排序的值。PHP 文档警告不要在“非英语”语言环境中使用 date()。(相同的链接。)
要格式化其他语言的日期,您应该使用 setlocale() 和 strftime() 函数而不是 date()。