我正在尝试使用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脚本应用于数据库时出错。
执行中:
插入calendarsystem
。events
(start
,end
,title
,resourceId
)值('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语句:
插入calendarsystem
。events
(start
,end
,title
,resourceId
)值('2019-03-25T14:00:00 -05:00','2019-03-25T15:00:00-05:00','xxx','b')
对不起,帖子格式太烂了
答案 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