我在qnap NAS上的个人MySQL数据库中创建了一个格式为yyyy-mm-dd的日期字段。 有时我需要在1880-00-00表格中插入此字段日期。 如果我使用qnap phpAdmin应用程序通过浏览器连接到数据库,我正确地看到值1880-00-00。
但是如果我使用像DBVisualizer这样的客户端,当我在db上运行select时,在数据字段中我看到1879-11-30而不是1880-00-00。
我怎样才能获得我在数据库中插入的正确值?
答案 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查询,但如果您的案例是“或多或少精确的日期”,无论如何,查询都不会给出稳定的结果。