在一個新的數據庫中遷移進來一些函數,然後測試時發現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擴展