先描述環境
- a 區
- mysql 5.7.40
- b 區
- mysql 8.0.31
- Local
- mysql 8.0.31
在下的 case 是要在過濾出「不是以 A123 為開頭編號」,要達成這樣的查詢語句(在下只列出 where clause)
- WHERE `sn` NOT LIKE 'A123%'
- WHERE `sn` REGEXP '^(?!A123).+'
- WHERE `sn` NOT REGEXP '^A123'
在下在local開發時,使用 2 的查詢子句,能正確的查詢到結果,然後傳上 b區 要交由 pm 測試,也正常…
所以在下就很放心的直上到 a區 給客戶測,但錯就錯在自己傳上去 a區 時沒馬上自己試試,結果當天下午 pm 就告知客戶有反應有一個功能查出來的資料都是空的,但明明檢查了一下至少會有五、六筆資料的才對,要在下檢查一下。
在下先是看 local 上的版本反應…正常
再看 b區 的反應…正常
那就打開 a區… server error !!!!
奇異了…
後來找出 log 來看,就發現了錯誤訊息「Got error 'repetition-operator operand invalid' from regexp」…
後來在網路上翻找了一下資料,原來在 mysql 8 之前,mysql 的正規表示法是不支援 capturing group 這種用小括號去群組化的方式的…
所以之後在下改用 1 就安然無事了
沒有留言:
張貼留言