【问题标题】:datetime doesn't save deciseconddatetime 不保存分秒
【发布时间】:2014-09-25 14:32:32
【问题描述】:

所以我在这里读到:Why doesn't MySQL support millisecond / microsecond precision? 从版本 5.6.4 开始,日期时间格式应该持续到毫秒。

但它对我不起作用,即使它不需要分秒。当我执行“INSERT”查询时,保存的值如下所示“2014-09-15 15:05:54”。

我想插入的值如下所示:“2014-09-15T15:05:54.0” 所以当我进行比较时,我得到了错误:/

这是我的插入查询:

            $bdd->query('INSERT INTO ev
            (id_event, ts, sp, lg, dir)
            VALUES 
            (NULL,"'.$evTs.'","'.$ev_sp.'","'.$ev_lg.'","'.$ev_dir.'")');

“$evTs”是时间戳。

更新 1

我如何创建我的表 ev:

'CREATE TABLE `ev` (
`id_event` int(32) NOT NULL AUTO_INCREMENT,
`ts` datetime NOT NULL,
`sp` int(32) NOT NULL,
`lg` int(32) NOT NULL,
`dir` int(32) NOT NULL,
`nbr_voie` int(32) NOT NULL,
PRIMARY KEY (`id_event`)

)

【问题讨论】:

  • 请向我们展示您的ev 表的CREATE TABLE 语句。你得到这个,即SHOW CREATE TABLE ev。必须是 DATETIME(3) 才能获得毫秒。
  • 两个可能的原因: 1) PHP 中的时间戳是整秒的整数,因此您可能存储了错误的值。 2. 你得到的结果可能会以隐藏毫秒的方式进行格式化。如果您可以显示最终查询,这将有所帮助。这些变量不是很有帮助。
  • 正如我所说,您必须使用ALTER COLUMN 来获取fractional second support。然后使用@MarcB 提到的语法。

标签: php mysql datetime timestamp


【解决方案1】:

那是因为T 不是有效 mysql 时间字符串的一部分。 MySQL的日期/时间字符串格式一直是

yyyy-mm-dd hh:mm:ss

现在支持小数秒

yyyy-mm-dd hh:mm:ss.sssss

这种格式的任何地方都没有对T 的任何支持。您必须使用STR_TO_DATE() 将您的“非标准”格式解析为 MySQL 可以接受的格式。或者甚至只是简单地使用字符串替换并执行REPLACE('yourstring', 'T', ' ')

【讨论】:

  • 是的,我也注意到了“T”,但是当我执行“INSERT”时,我的格式正确,直到几秒钟。好的,我明天试试你的答案。谢谢。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-11-02
  • 1970-01-01
  • 2016-11-16
  • 1970-01-01
  • 2011-09-06
相关资源
最近更新 更多