如何在MYSQL中设置datetime列的默认值?

如何在MYSQL中设置datetime列的默认值?,mysql,datetime,phpmyadmin,default,Mysql,Datetime,Phpmyadmin,Default,我有一个web应用程序,可以记录一些事件(不重要的是什么)。我的web服务器位于不同的时区,我想记录我的时区的日期和时间 我创建了带有字段的简单DB表: ID-BIGINT(自动递增),主键 WH-DATETIME(这是有问题的一个) LOG\u TEXT VARCHAR(255)(事件文本) 字段WH是有问题的,我只能设置当前\u时间戳,但显示的时间比我当前的时区时间少6小时 因此,我尝试设置字段WH的默认值(在phpMyAdmin中),如下所示:CONVERT\u TZ(WH,@@globa

我有一个web应用程序,可以记录一些事件(不重要的是什么)。我的web服务器位于不同的时区,我想记录我的时区的日期和时间

我创建了带有字段的简单DB表:
ID-BIGINT
(自动递增),
主键
WH-DATETIME
(这是有问题的一个)
LOG\u TEXT VARCHAR(255)
(事件文本)

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

因此,我尝试设置字段WH的默认值(在phpMyAdmin中),如下所示:
CONVERT\u TZ(WH,@@global.time\u zone,+01:00')

phpMyAdmin向我显示以下错误:

#1067 - invalid default value for 'WH'
如何为当前的时间戳设置不同的时区,有什么帮助吗

PS:我在谷歌上搜索了很多,没有与这个问题相匹配的答案 PPS:我不能在我的服务器上更改时区,这是一个共享主机,根本不可能


提前感谢您的宝贵意见。

在mysql配置文件(my.cnf)中,设置在第行下方并重新启动mysql

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

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

SET GLOBAL time_zone = '+1:00';

您可以在插入之前创建触发器以更新日期和时间,因此,这就是我解决问题的方法:

  • 创建了具有相同字段的视图,但字段
    WH
    增加了6小时。我知道这不是最好的选择,但我所有的东西都在同一时区(UTC+6)处理
现在,正确的时间戳数据存储在此视图中,但是原始
LOG
表具有系统时区时间戳。表
LOG
中的字段
WH
具有默认值
CURRENT\u时间戳

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

SQL:


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

我知道这一点,但正如我提到的,我使用的是共享主机,因此我没有根权限。简单-我无法更改mysql的系统设置。将不同时区写入数据库的唯一方法是使用CONVERT_TZ。。我可以使用convert命令选择时区中的值,但我认为在DB表中使用正确的默认值要比使用select复杂得多。我想我将创建一个
视图
,在这里我将转换时区长期来看,您几乎总是最好在UTC存储数据,然后在提取数据时将时区更改为本地时区。如果你搬家怎么办?如果服务器移动怎么办?还是只是下潜几个小时?使用UTC始终可以防止由于类似情况而出现意外问题。
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;