MySQL 5.7.34
研发丢来一个SQL,说一直执行报错(SQL只保留问题部分):
select * from order o WHERE o.created_time < '2021-12-01 00:00:00';
看似没毛病的SQL,执行时一直报错,逐个隐藏完整SQL部分内容后定位到上面的条件o.created_time < '2021-12-01 00:00:00' 存在问题
mysql> select * from order o WHERE o.created_time < '2021-12-01 00:00:00';
1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '' at line 1
直觉就是存在特殊字符,于是把各个空格删除后再输入,仍然报错。
百思不得其解,后面把SQL复制后贴到sublime看看有没有什么发现,果然,在最后的分号前面有个 0x200b 的字符,google一下。
维基百科中称 0x200b 代表零宽空格(zero-width space, ZWSP),是一种不可打印的Unicode字符,用于可能需要换行处。涨姿势!
遇到SQL执行不能通过报错直接判断的妖问题时,不妨将SQL贴到sublime,也许有新发现。