【问题标题】:Why does SELECT * FROM [table] WHERE [timestamp_field]<"NOW()" work in MySQL but not in Mariadb?为什么 SELECT * FROM [table] WHERE [timestamp_field]<"NOW()" 在 MySQL 中有效,但在 Mariadb 中无效?
【发布时间】:2016-02-20 22:43:48
【问题描述】:

我正在将我正在编写的应用程序从最新版本的 MySQL 转换到最新版本的 Mariadb (10.1.something),到目前为止一切都很顺利,除了以下内容:

SELECT `fields` FROM `my_table` WHERE `timestamp_created`<"NOW()"

适用于 MySQL,但不适用于 MariaDB。 timestamp_created 字段当然有时间戳数据。类似的东西

SELECT `fields` FROM `my_table` WHERE `timestamp_created`<"2016-02-19 19:59:59"

在 MariaDB 中有效,但在我使用 timestamp_created 时无效

为什么? NOW() 在 MySQL 中的工作方式与在 MariaDB 中基本相同,那么为什么使用 NOW() 比较时间戳在 MariaDB 中不起作用?

谢谢!

【问题讨论】:

  • "NOW()" 是字符串而不是时间戳

标签: mysql sql mariadb


【解决方案1】:

NOW() 是一个函数,而不是一个字符串。

SELECT
    fields
FROM
    my_table
WHERE
    timestamp_created < NOW()

在 MySQL 上,双引号 " 用作转义标识符分隔符,其方式与 T-SQL/MSSQL 使用方括号字符 [] 的方式非常相似。 MySQL 字符串必须用单引号字符' 分隔,因此您对"NOW()" 的使用与NOW()[NOW()] 的解释方式相同。

此处记录了此行为:http://dev.mysql.com/doc/refman/5.7/en/string-literals.html

...字符串文字只能在单引号内引用,因为双引号内引用的字符串被解释为标识符。

【讨论】:

  • @RickJames 我已经修改了我的答案来解释。
猜你喜欢
  • 2018-09-01
  • 1970-01-01
  • 2011-10-07
  • 2014-05-28
  • 1970-01-01
  • 1970-01-01
  • 2019-05-16
  • 2010-11-29
  • 2014-07-20
相关资源
最近更新 更多