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

时间:2019-04-01 12:03:19

标签: mysql datetime phpmyadmin default

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

我创建了带有字段的简单数据库表: 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:我在Google上搜索了很多,没有找到与该问题相匹配的答案 PPS:我无法更改服务器上的时区,它是共享主机,根本不可能。

提前感谢您的宝贵意见。

3 个答案:

答案 0 :(得分:0)

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

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

或使用root登录mysql,然后在下面输入查询

SET GLOBAL time_zone = '+1:00';

答案 1 :(得分:0)

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

答案 2 :(得分:0)

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

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

现在此视图中存储了正确的时间戳数据,但是原始LOG表具有系统时区时间戳。表WH中的字段LOG具有默认值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一起使用,因为视图不能包含参数。