通过MySQL中的列纠正了不正确的时区结果?

时间:2018-08-19 13:00:46

标签: mysql database timestamp-with-timezone

我有一个位于远程共享服务器上的MYSQL数据库。

当用其他数据填充记录时,我表中的一列要求自动用CURRENT_TIMESTAMP填充。

数据库使用的系统时间为“ UTC +00:00”,但我需要将此时间设置为“ UTC +01:00”

我不能使用“ SET GLOBAL time_zone ='+01:00';”因为我没有特权(可以理解),并且了解没有办法仅在数据库级别设置time_zone(除了会话实例,此解决方案还需要坚持)。

有没有一种方法可以像计算那样用“ CURRENT_TIMESTAMP + ADD ONE HOUR”填充列?我正在寻找数据库级别的解决方案。

我不是数据库专家,但请多多指教。

3 个答案:

答案 0 :(得分:0)

您将只更改时区,

示例:

如果不存在,则创建表test_timestamp(  t1时间戳 );

SET time_zone ='+ 00:00';

插入INTO test_timestamp VALUES('2008-01-01 00:00:01');

选择     11 从     test_timestamp;

t1 ='2008-01-01 00:00:01'

SET time_zone ='+ 03:00';

选择t1 FROM test_timestamp;

t1 ='2008-01-01 03:00:01'

答案 1 :(得分:0)

寻找功能CONVERT_TZ

mysql> SELECT CONVERT_TZ('2004-01-01 12:00:00','GMT','MET');
    -> '2004-01-01 13:00:00'
mysql> SELECT CONVERT_TZ('2004-01-01 12:00:00','+00:00','+10:00');
    -> '2004-01-01 22:00:00'

这可能对您所需要的有所帮助,这是文档:

https://dev.mysql.com/doc/refman/8.0/en/date-and-time-functions.html#function_convert-tz

答案 2 :(得分:0)

您可以创建一个触发器,该触发器每次插入该列时都会启动

 DELIMITER $$
CREATE TRIGGER update_count

AFTER UPDATE ON table_name (time)

  UPDATE table_name
    SET HOUR(column_name) = SEC_TO_TIME((UNIX_TIMESTAMP(HOUR(column_name))+1)*60)
  WHERE time= NEW.time;

END;
$$DELIMITER ;