Mau*_*cho 5 mysql mysql-5.5 functions mysql-5.6
我面临一个问题,当从 MySQL 5.5.46 迁移到 MySQL 5.6.34 时,我无法使用 TIME 函数获得相同的结果。问题是,当我在 5.5 中使用 TIME 函数时,它在 datetime 为“0000-00-00 00:00:00”时返回 NULL,但前提是它是来自表的值,但使用 5.6 我得到'00:00:00'。这听起来不错,但是有许多查询依赖于 5.5 的行为(结果为 NULL)。这是我为准确测试该行为所做的示例:
一、表:
CREATE TABLE `prueba_time` (
`check_in` datetime DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
Run Code Online (Sandbox Code Playgroud)
然后我插入一行值为 0000-00-00 00:00:00
mysql> INSERT INTO prueba_time VALUES ('0000-00-00 00:00:00');
Run Code Online (Sandbox Code Playgroud)
然后我测试了TIME函数……5.5中的结果是:
mysql> SELECT TIME(check_in),check_in,TIME('0000-00-00 00:00:00') FROM prueba_time;
+----------------+---------------------+-----------------------------+
| TIME(check_in) | check_in | TIME('0000-00-00 00:00:00') |
+----------------+---------------------+-----------------------------+
| NULL | 0000-00-00 00:00:00 | 00:00:00 |
+----------------+---------------------+-----------------------------+
Run Code Online (Sandbox Code Playgroud)
和 5.6 中的相同查询:
mysql> SELECT TIME(check_in),check_in,TIME('0000-00-00 00:00:00') FROM prueba_time;
+----------------+---------------------+-----------------------------+
| TIME(check_in) | check_in | TIME('0000-00-00 00:00:00') |
+----------------+---------------------+-----------------------------+
| 00:00:00 | 0000-00-00 00:00:00 | 00:00:00 |
+----------------+---------------------+-----------------------------+
Run Code Online (Sandbox Code Playgroud)
所以......不同的结果,我不知道为什么......
sql_mode 就不一样了。在 5.5 中它是空的,在 5.6 中我使用的是 STRICT_TRANS_TABLES,NO_ENGINE_SUBSTITUTION 但根据我所读到的内容,这没有影响。我希望你能帮我解决这个问题。
我在这里看不出有什么问题。如果有的话,我会说问题出在旧的行为上,因为它只是不一致。根据是'0000-00-00 00:00:00'作为文字还是作为列值传递,TIME 将返回 a00:00:00或 null。然而,从版本 5.6 开始,它始终返回00:00:00.
因此,要回答行为改变的原因,之前的行为是有问题的,而新的行为(更)一致。
| 归档时间: |
|
| 查看次数: |
288 次 |
| 最近记录: |