【问题标题】:Issue in date comparison in MySQLMySQL中日期比较的问题
【发布时间】:2010-08-30 08:12:32
【问题描述】:

我有以下设置的 MySQL 服务器版本:5.0.77 MySQL客户端版本:5.0.41 协议版本:10 MySQL 字符集:UTF-8 Unicode (utf8) MySQL 连接排序规则:utf8_unicode_ci

我只是在做一个简单的查询,它返回错误 SELECT * FROM table1 WHERE mydate >= '2010-08-30'

今天是 8 月 30 日,我有 1 行 mydate 为 '2010-06-01' 并且该行已被选中。为什么? 如果我这样做,它会返回正确的零记录 SELECT * FROM table1 WHERE mydate >= NOW()

第一个查询在本地服务器中正确执行,但不是实时服务器。

我该如何解决这个问题?是不是因为不同的 MySQL 版本、时间设置、服务器设置……我在找什么?

谢谢。

【问题讨论】:

  • mydate 列的数据类型是什么?
  • mydate 是一个 VARCHAR(15)。那应该没问题吧?它在本地工作。
  • 不,不行。它应该是日期类型

标签: sql mysql date


【解决方案1】:

在 MYSQL 中,您不应在日期周围使用单引号 '',这会导致 MYSQL 服务器将您的输入解释为字符串而不是日期。我还建议在数据库中的日期条目周围使用 date() 以确保它确实是一个日期。

这是我将如何在 MYSQL 中执行上述查询的示例:

SELECT * FROM table1 WHERE date(mydate) >= (2010-08-30)

这个查询应该返回你想要的结果。

【讨论】:

【解决方案2】:

这可能是 MySQL >= 5.0.50 中修复的错误的表现。我相信只有在日期列上有索引时才会出现该错误。

详情请参阅bug report

这可能不是您遇到的错误,但您的问题的根本原因似乎很可能是 MySQL 错误已在一个版本中修复,但在其他版本中未修复。我建议您将两个版本的数据库放在一起。

【讨论】:

  • 你说的是服务器版本吗?当前一个是 5.0.77。那么还有什么导致问题的呢?还是您的意思是将客户端版本也设为 5.0.77?
  • 您需要开始消除本地和服务器之间的差异,以缩小问题的可能原因。通常,本地比较容易搞砸,所以我先将客户端版本设置为 5.0.77 并查看问题是否在那里表现出来。
猜你喜欢
  • 2011-07-10
  • 2021-03-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-07-30
  • 2014-04-01
  • 2014-02-27
  • 1970-01-01
相关资源
最近更新 更多