mysql 中 Illegal mix of collations for operation “find_in_set” 問題排查

在一個新的數據庫中遷移進來一些函數,然後測試時發現mysql報錯:

Illegal mix of collations (utf8_general_ci,IMPLICIT) and (utf8_unicode_ci,IMPLICIT) for operation 'find_in_set'

按照以往的經驗,首先排查數據庫的編碼設置是否與表的編碼設置一致;排查之後發現表和數據庫均爲utf8/utf8_general_ci編碼。

 

ORZ  。。。。

問題還是要解決,哪到底是什麼地方除了問題?難道是函數創建時的編碼格式不對?如果是這個函數創建時問題,怎麼查看函數的編碼格式呢?

順着這個思路往下走,找到查看函數編碼的命令:show function status like "你的函數名稱%";

果然鬼在這兒!!!

粗暴的把該函數刪掉然後再新建,問題搞定! 在遷移數據庫時一定要把檢查新舊數據庫的編碼是否一致。

擴展知識:

SHOW CREATE PROCEDURE 返回使用CREATE PROCEDURE 建立的預先指定的存儲過程的文本。這一聲明是SQL:2003規範的一個MySQL擴展
SHOW CREATE FUNCTION 返回使用CREATE FUNCTION建立的預先指定的存儲過程的文本。這一聲明是SQL:2003規範的一個MySQL擴展
SHOW PROCEDURE STATUS 返回一個預先指定的存儲過程的特性,包括名稱、類型、建立者、建立日期、以及更改日期。這一聲明是SQL:2003規範的一個MySQL擴展
SHOW FUNCTION STATUS 返回一個預先指定的存儲函數的特性,包括名稱、類型、建立者、建立日期、以及更改日期。這一聲明是SQL:2003規範的一個MySQL擴展

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章