由于UTC

时间:2019-03-29 16:10:19

标签: mysql timestamp fullcalendar

我正在尝试使用FullCalendar v4,并且无法将数据发布到MySQL。我将问题缩小为$ start和$ end,最后使用UTC,即使我的数据类型是TIMESTAMP,MySQL也不会接受。如果我手动将标准日期时间数据(不带UTC)分配给$ start和$ end,它将发布到表中。通过覆盖$ POST中的数据,我在event.php中将这些语句注释掉了。

我的想法是我在MySQL中有些歪斜,导致TIMESTAMP数据类型实际上是DATETIME数据类型。我已经删除并使用下面的SQL语句创建了表。

运行->使用jQuery的MySQL 8.01.5,Windows Server 2016,PHP 7.2.7

...     创建表calendarsystem.events(

id int(11) NOT NULL AUTO_INCREMENT,

title VARCHAR(45) NOT NULL ,

start TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,

end TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,

resourceId VARCHAR(45) NOT NULL ,

PRIMARY KEY (id)

);

...

add_event.php的代码:

<?php
$title = $_POST['title'];
$start = $_POST['start'];
$end = $_POST['end'];
$resourceId = $_POST['resourceId'];

//$title = 'wtf';

//$start = '2019-03-25 16:00:00';

//$end = '2019-03-25T17:00:00';

//$resourceId = 'b';

try {
    require "db_config.php";
} catch(Exception $e) {
    exit('Unable to connect to database.');
}

$sql = "INSERT INTO events (title, start, end, resourceId) VALUES (:title, :start, :end, :resourceId )";

$q = $bdd->prepare($sql);

   q->execute(array(':title'=>$title,':start'=>$start,':end'=>$end,':resourceId'=>$resourceId));
?>

...

如果打开MySQL Workbench并尝试使用从chrome的输出窗口复制的UTC添加数据,则在应用时会出现以下错误:

操作失败:将SQL脚本应用于数据库时出错。 执行中: 插入calendarsystemeventsstartendtitleresourceId)值('2019-03-25T14:00:00 -05:00','2019-03-25T15:00:00-05:00','xxx','b');

错误1292:1292:错误的日期时间值:第1行的'开始'列的'2019-03-25T14:00:00-05:00' SQL语句: 插入calendarsystemeventsstartendtitleresourceId)值('2019-03-25T14:00:00 -05:00','2019-03-25T15:00:00-05:00','xxx','b')

对不起,帖子格式太烂了

1 个答案:

答案 0 :(得分:0)

我认为MySQL无法识别'T'字符或字符串值中的尾随时间偏移。

 '2019-03-25T15:00:00-05:00'
            ^        ^^^^^^

解决此问题的一种方法是删除该T字符和偏移量

 '2019-03-25 15:00:00'
            ^ 

我们希望MySQL能够识别这种格式的字符串。

或者,我们可以在适当的格式模型中使用STR_TO_DATE函数,以便MySQL可以从不同格式的字符串中解释日期时间/时间戳值。

此处是MySQL参考手册中的相关主题:

https://dev.mysql.com/doc/refman/8.0/en/date-and-time-literals.html