本周六直播课《极致性能优化 around MySQL》
进技术交流群方式,见文末海报
====声明===
个人始终觉得越是用的人多,才会发现越多bug.
多发点发现的坑,让用的同学绕着走.
对MySQL 8.x是总体赞的, 9.0不要再拉稀了!
==正文分割线==
复现方式:MySQL 8.0.19
> create table t1(d datetime);Query OK, 0 rows affected (0.12 sec)> insert into t1 values ('2024-11-06 18:00:00+08');ERROR 1292 (22007): Incorrect datetime value: '2024-11-06 18:00:00+08' for column 'd' at row 1
相同的语句在8.0.18就能插入成功, +08用来表示时区信息.
这样就会导致如果在8.0.18之前版本中,
使用了'2024-11-06 18:00:00+08'这个表示法的应用程序,
升级到8.0.19及之后的版本,业务就会报错.
==原因和代码==
先看8.0.19的release note.

为了增加这个支持, 代码里对时间格式的处理代码几乎做了重构.
重构的代码把“+”之后的格式做了严格限制,必须是HH:MM的格式,不再支持单独数字的格式了.
修改后的代码逻辑:

==讨论==
以前我们理解的MySQL的升级策略是:
影响正确性的bug,小版本会修复;
会影响兼容性的,都在跨到大版本的时候引入.
这个case就有点不讲唔得了
==例行海豹==

原文作者:丁奇3306;如有侵权,请联系管理员删除。