【问题标题】:How does mySQL determine the time zone for the TIMESTAMP field?mySQL 如何确定 TIMESTAMP 字段的时区?
【发布时间】:2011-07-25 01:17:17
【问题描述】:

根据mysqltutorial

MySQL TIMESTAMP 列的值取决于连接的时间 区。当为 MySQL TIMESTAMP 列插入值时,它们是 从连接的时间转换为通用协调时间 (UTC) 区。当您选择该值时,服务器会将其从 UTC 转换回来 到连接的时区,因此您具有与您相同的值 插入。

它从哪里获得此信息。从,用户将他的操作系统设置为或从其他方法开始的时间?

Javascript 也有处理时区的方法,但涉及更多:onlineaspect

【问题讨论】:

    标签: mysql timezone timestamp


    【解决方案1】:

    要指定您需要执行的特定连接时间

    SET time_zone = TZ;
    

    其中TZ 可以是数字偏移量,如+11:00 或时区名称Asia/Vladivostok(对于后者,您需要导入时区描述。请您的DBA 这样做)

    【讨论】:

    • 我的问题不清楚。但回想起来,mysql无法知道客户端时间是多少。 time_zone 必须根据用户偏好或类似设置来确定。是否考虑到夏令时?
    • @Chris Aaker:如果您通过名称指定时区并且您有新的时区数据库 - 那么是的,mysql 会考虑夏令时
    【解决方案2】:

    示例有错误,我只是测试了它。无论时区如何,它都会返回先前插入的时间戳。 mysql 将始终插入您指定的时间,而不进行修改。如果你需要调整时区,你必须明确告诉 mysql 这样做;否则所有时间都假定为“本地服务器时间”。

    【讨论】:

    • 除了损坏的“创建表”语法:INSERT INTO test_timestamp VALUES('2008-01-01 00:00:01');这会按预期插入“2008-01-01 00:00:01”。从 test_timestamp 中选择 t1;按应有的方式返回“2008-01-01 00:00:01”,但不是示例中所说的时区调整值。
    • 它在存储本身中进行了时区调整。对于客户端,它始终根据当前会话/全局 time_zone 设置显示。
    • 确实,它现在可以了 :) 重新连接到我的测试数据库而不执行 'SET time_zone='+00:00';现在它显示了“2008-01-01 13:00:01”。 mysqltutorial 应该更清楚这一点...
    猜你喜欢
    • 2015-01-10
    • 2012-05-18
    • 1970-01-01
    • 2013-08-08
    • 2019-12-09
    • 1970-01-01
    • 2016-10-31
    • 2021-02-14
    • 1970-01-01
    相关资源
    最近更新 更多