尽管行是时间戳,但 SQL 声称日期时间值不正确
Posted
技术标签:
【中文标题】尽管行是时间戳,但 SQL 声称日期时间值不正确【英文标题】:SQL claiming incorrect datetime value despite the row being timestamp 【发布时间】:2020-08-12 10:47:51 【问题描述】:问题是列(开始)设置为时间戳。
于是我为插入查询写了如下代码:
$query = "INSERT INTO $this->table_name (`user_id`, `name`, `code`, `start`, `city`, `state`, `groups`) VALUES ( :user_id, :name, :code, TIMESTAMP( :start ), :city, :state, :groups)";
$stmt = $this->connection->prepare($query);
$stmt->bindParam(":user_id", $this->user_id);
$stmt->bindParam(":name", $this->name);
$stmt->bindParam(":code", $this->code);
$stmt->bindParam(":start", $this->start);
$stmt->bindParam(":city", $this->city);
$stmt->bindParam(":state", $this->state);
$stmt->bindParam(":groups", $this->groups);
if ($stmt->execute()) ........
除了“组”之外的所有变量都是字符串。 “组”是 JSON。
出现以下错误:
“不正确的日期时间值:'597492800'”
所以问题是为什么它说不正确的日期时间,当列是时间戳并且我正在插入时间戳时。
即使我尝试将时间戳设置为 int,也没有解决问题。
$stmt->bindParam(":start", $this->start, PDO::PARAM_INT);
我正在从后端发送时间戳并想保存它。我不需要从某种格式转换为时间戳,因为时间戳已经具有正确的格式。
我对 sql 世界有点陌生,这让我感到惊讶。如果你能帮助我,我会非常高兴,因为我已经花了一整天的时间来完成这个相对简单的插入。
(mysql版本:8)
非常感谢!
【问题讨论】:
PDO::PARAM_INT
将是不正确的类型 - 它应该是 PDO::PARAM_STR
。你为$this->start
提供了什么价值?
将您的列更改为 INT 字段或大约 20 个字符的 TEXT 字段,否则您需要将日期真正转换为 unix 时间戳
"Timestamp" 只是日期和时间测量的通用英文单词。你可能认为它是 Unix 时间的同义词。
【参考方案1】:
TIMESTAMP()
采用date
或datetime
表达式,而597492800
不是这样的值。像'2020-08-12'
这样的东西。
错误似乎很明显。
不清楚的是你想做什么——因为问题没有解释这一点。我可能推测您希望FROM_UNIXTIME()
将数字转换为日期/时间值。
【讨论】:
很抱歉不清楚。我只需要按原样保存时间戳(1234213421)。无需转换,因为我从前端发送时间戳,而不是任何其他时间格式。 FROM_UNIXTIME() 是我可能需要的。我只是认为 FROM_UNIXTIME() 用于 DATETIME 列以从时间戳转换。谢谢!【参考方案2】:TIMESTAMP 数据类型用于同时包含日期和时间部分的值。 TIMESTAMP 的范围为 '1970-01-01 00:00:01' UTC 到 '2038-01-19 03:14:07' UTC。
来源:https://dev.mysql.com/doc/refman/8.0/en/datetime.html
【讨论】:
以上是关于尽管行是时间戳,但 SQL 声称日期时间值不正确的主要内容,如果未能解决你的问题,请参考以下文章