mysql gmt create_选择TIMESTAMP字段时绕过MySQL自动GMT转换

看起来似乎无法从MySQL字段中获取原始UTC值;每个功能都使用时区设置,即SYSTEM或您配置的任何其他功能。

MySQL强迫您使用日期转换的方式至少是非常有限的。例如,假设您将MySQL服务器设置为GMT -03:00和GMT / DST -02:00的时区,并且您存储的日期时间类似于2016-07-01 10:00:00' 。如果您在夏令时结束后选择此值,您将获得2016-07-01 09:00:00'。

除非您单独存储GMT偏移量,或者您之前知道服务器存储时的时区,否则您无法确定确切的时间。

我们使用了第二种方法。我们保存了服务器时区并用它来计算偏移并返回ISO日期时间,因此可以很容易地进行未来的计算。

DROP FUNCTION IF EXISTS `iso_datetime`;;

CREATE FUNCTION `iso_datetime` (

p_datetime TIMESTAMP

) RETURNS VARCHAR(25)

READS SQL DATA

BEGIN

DECLARE _timezone VARCHAR(255) DEFAULT NULL;

DECLARE _offset VARCHAR(6) DEFAULT NULL;

SET _timezone = (SELECT timezone FROM network);

SET _offset = (SELECT SUBSTRING(TIMEDIFF(p_datetime,CONVERT_TZ(p_datetime, _timezone,'UTC')), 1,6));

RETURN CONCAT(DATE_FORMAT(p_datetime, '%Y-%m-%dT%H:%i:%S'), _offset);

END;

为了做到这一点,你必须将时区信息加载到MySQL中,这样服务器就可以为你计算日期的tz偏移量。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值