用于存储用户会话的表:
CREATE TABLE sessions (
    user_id INT,
    expires TIMESTAMP
);
要创建会话:
INSERT INTO sessions (user_id, expires) VALUES (:user_id,
    CURRENT_TIMESTAMP + INTERVAL '+15 minutes');
要检索会话:
SELECT * FROM sessions WHERE user_id = :user_id AND
    CURRENT_TIMESTAMP < expires;
这是可移植的SQL吗?
这适用于通过PHP PDO扩展(不包括SQLite)提供的任何数据库吗?
这在不同的时区是否正确?跨夏令时调整?
混合CURRENT_TIMESTAMP(包括时区信息)与TIMESTAMP列(没有)的任何问题?
根据我的经验,日期/时间值在 SQL 方言中是相当有问题的。
\n\nDATE、TIMESTAMP、TIMESTAMP WITH TIME ZONE和TIMESTAMP WITH LOCAL TIME ZONE。\nTIMESTAMP数据类型,但它并不是您想象的那样。如果我必须以绝对可移植的方式处理日期/时间值,我会将值存储为 ISO8601 紧凑形式的 char/varchar
\n\nYYYYMMDDTHHMMSS[\xc2\xb1HH:MM]\n其中时间部分是 24 小时/军用时间。如果您需要时区支持,请包含与 UTC 的偏移量,或“Z”以指示祖鲁 (UTC) 时间。严格来说,如果没有“Z”后缀,ISO 8601 日期/时间值应该被解释为当地时间。
\n\n根据您的需要,可能值得将日期和时间部分分成单独的列。
\n\nISO8601给您
\n\n