早晨剛來上班沒多久,突然收到測試童鞋發過來生產環境的一個報錯。
Illegal mix of collations for operation 'UNION'。
什么鬼情況,怎么剛上線就出問題了
我讓測試童鞋重現了一下,我監視着服務器的日志。
我去。還真的有。接下來就開始茫茫找問題路。
——————————————————————————————————————————————————
找問題:
1.首先網上搜索了下,說是union關聯sql里字段編碼問題不一致。因為測試環境沒有這個問題,我首先定位於數據問題。
挨個刪減查詢字段,最后定位到一個字段上,語句是這么寫的,snStartDest.一個拼接類型的字段:
SELECT
id,
CONCAT( route_starts, route_dests ) AS snStartDest
FROM A
UNION (
SELECT
user_id AS id,
'' AS snStartDest
FROM B)
2.在concat里,我單獨一個字段都是ok的(CONCAT( route_starts)CONCAT( route_dest)),只是兩個字段concat一起是不行的(CONCAT( route_starts, route_dests ))。此時證明已不是數據問題,想起來搜查網上的字段編碼問題,決定看下是不是生產環境字段編碼確實有問題。
3.生產環境倆個字段果然不一致,再看了下測試環境是一致的。找到運維童鞋,運維也很蒙圈,什么時候倆字段變了。
最后在線上環境都改成unicode編碼,解決。測試環境編碼一直一致。