奇怪的数据库行为

时间:2016-03-13 22:28:05

标签: mysql date

我在qnap NAS上的个人MySQL数据库中创建了一个格式为yyyy-mm-dd的日期字段。 有时我需要在1880-00-00表格中插入此字段日期。 如果我使用qnap phpAdmin应用程序通过浏览器连接到数据库,我正确地看到值1880-00-00。

但是如果我使用像DBVisualizer这样的客户端,当我在db上运行select时,在数据字段中我看到1879-11-30而不是1880-00-00。

我怎样才能获得我在数据库中插入的正确值?

1 个答案:

答案 0 :(得分:1)

1800-00-00不是有效日期。

MySQL用有效的日期值替换它。

以下是对幕后工作的解释:

1800-00-00 ==> 1799-11-30 -- substract 1 month and 1 day from valid 1800-01-01
1800-00-01 ==> 1799-12-01 -- substract 1 month from valid 1800-01-01
1800-01-00 ==> 1799-12-31 -- substract 1 day from valid 1800-01-01
1800-00-31 ==> 1799-12-31 -- substract 1 day from valid 1800-01-01
1800-01-01 ==> 1800-01-01 -- substract nothing, it's a valid date

如果1800-00-00之类的日期对您有效 ,因为您不知道事件发生的月份或日期,则应考虑将列类型更改为{{1}而不是varchar因为将来你会遇到问题 - 特别是在使用ODBC时。这些日期将为空,因为该界面不知道它们。

当然,您必须充分意识到您正在放弃构建操作和计算date类型(特定函数)的SQL查询,但如果您的案例是“或多或少精确的日期”,无论如何,查询都不会给出稳定的结果。