Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/date/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 奇怪的数据库行为_Mysql_Date - Fatal编程技术网

Mysql 奇怪的数据库行为

Mysql 奇怪的数据库行为,mysql,date,Mysql,Date,我在qnap NAS上的个人MySQL数据库中创建了格式为yyyy-mm-dd的日期字段。 有时我需要在该字段中插入1880-00-00表格中的日期。 如果我使用qnap phpAdmin应用程序通过浏览器连接到DB,我正确地看到值1880-00-00 但是如果我使用像DBVisualizer这样的客户机,当我在db上运行select时,在数据字段中我看到的是1879-11-30,而不是1880-00-00 如何获得插入数据库的正确值?1800-00-00不是有效日期 MySQL将其替换为有效的

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

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


如何获得插入数据库的正确值?

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 /代码>对于< <强> >是有效的>强>,因为您不知道事件发生的月份或一天,您应该考虑将列类型更改为<代码> VARCHAR < /代码>,而不是<代码>日期>代码>,因为将来您将遇到问题-尤其是在使用ODBC时。这些日期将为空,因为该接口不知道这些日期


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

您是如何创建表的?是否对日期进行了计算?能否创建sqlfiddle来重新创建奇怪的行为?