MySQL 5.7.34
研發(fā)丟來一個SQL则拷,說一直執(zhí)行報(bào)錯(SQL只保留問題部分):
select * from order o WHERE o.created_time < '2021-12-01 00:00:00';
看似沒毛病的SQL涩赢,執(zhí)行時一直報(bào)錯押蚤,逐個隱藏完整SQL部分內(nèi)容后定位到上面的條件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
直覺就是存在特殊字符苞慢,于是把各個空格刪除后再輸入,仍然報(bào)錯风钻。
百思不得其解,后面把SQL復(fù)制后貼到sublime看看有沒有什么發(fā)現(xiàn)酒请,果然骡技,在最后的分號前面有個 0x200b 的字符,google一下羞反。
image.png
維基百科中稱 0x200b 代表零寬空格(zero-width space, ZWSP)布朦,是一種不可打印的Unicode字符,用于可能需要換行處昼窗。漲姿勢是趴!
遇到SQL執(zhí)行不能通過報(bào)錯直接判斷的妖問題時,不妨將SQL貼到sublime澄惊,也許有新發(fā)現(xiàn)唆途。