【问题标题】:How to set default value for datetime column in MYSQL?如何在 MYSQL 中设置日期时间列的默认值?
【发布时间】:2019-04-01 12:03:19
【问题描述】:

我有一个网络应用程序,它记录一些事件(不重要)。我的网络服务器位于不同的时区,我想记录我的时区的日期和时间。

我创建了带有字段的简单数据库表: ID - BIGINT(自动递增),primary key WH - DATETIME(这是有问题的) LOG_TEXT VARCHAR(255)(事件文本)

字段 WH 有问题,我只能设置 CURRENT_TIMESTAMP,但显示的时间比我当前的时区时间少 6 小时。

所以我尝试为字段 WH(在 phpMyAdmin 中)设置默认值,如下:CONVERT_TZ(WH,@@global.time_zone,'+01:00')

phpMyAdmin 显示以下错误:

#1067 - invalid default value for 'WH'

任何帮助如何为 CURRENT_TIMESTAMP 设置不同的时区?

PS:我用谷歌搜索了很多,没有与该问题匹配的答案 PPS:我无法更改服务器上的时区,它是共享主机,根本不可能。

提前感谢您提供宝贵的 cmets。

【问题讨论】:

  • 从长远来看,您最好在 UTC 存储,然后在提取数据时将时区更改为本地时区。如果搬家怎么办?如果服务器移动了怎么办?或者只是下降几个小时?使用 UTC 始终可以防止由于此类原因而导致的意外问题。

标签: mysql datetime phpmyadmin default


【解决方案1】:

在mysql配置文件(my.cnf)中设置以下行并重启mysql

default-time-zone='+01:00'

或者用root登录mysql并输入下面的查询

SET GLOBAL time_zone = '+1:00';

【讨论】:

  • 我知道这一点,但正如我所提到的,我使用的是共享主机,所以我没有 root 权限。简单地说 - 我无法更改 mysql 的系统设置。将不同时区写入我的数据库的唯一方法是使用 CONVERT_TZ。我可以使用该转换命令在我的时区中选择值,但我认为在我的数据库表中使用正确的默认值比使用选择复杂化要简单得多。我想我会创建一个VIEW 我将在其中转换时区
【解决方案2】:

您可以在 INSERT 之前创建 TRIGGER 以更新日期和时间

【讨论】:

    【解决方案3】:

    所以,这就是我解决问题的方法:

    • 创建了一个具有相同字段的视图,但字段 WH 增加了 6 小时。我知道这不是最好的选择,但我所有的东西都在同一个时区 (UTC+6) 处理

    现在正确的时间戳数据存储在此视图中,但是原始LOG 表具有系统时区时间戳。表LOG中的字段WH具有默认值CURRENT_TIMESTAMP

    现在我可以通过从V_LOG 中选择值来查看我的日志。

    SQL:

    CREATE ALGORITHM=UNDEFINED DEFINER=`myuser`@`localhost` SQL SECURITY DEFINER VIEW `V_LOG` 
    AS 
    SELECT ID, DATE_ADD(WH,interval 6 HOUR) AS WH,LOG_TEXT FROM LOG;
    

    我无法将 CONVERT_TZ 与 @@global.time_zone 一起使用,因为视图不能包含参数。

    【讨论】:

      猜你喜欢
      • 2010-09-15
      • 2017-07-06
      • 2014-07-02
      • 1970-01-01
      • 1970-01-01
      • 2018-12-20
      • 2023-03-24
      • 1970-01-01
      相关资源
      最近更新 更多