由於存儲過程中定義參數時,無法定義其字符集,因此調用存儲過程的時候,會默認讀取全局變量character_set_server,而且還是只讀取MySQLd啟動時該全局變量的值作為存儲過程中默認的傳輸字符集。因此,如果數據表/字段使用系統默認的字符集(比如latin1)的話,調用存儲過程更新一些非英文的字符串字段時,就不會發生問題;但是,如果數據表/字段的字符集不是系統默認的字符集(比如默認是latin1,數據表使用的是utf8),就會出現問題了。解決辦法是:在my.cnf(Windows下是my.ini),增加一行:default-character-set=utf8
或者
character-set-server=utf8
也可以。如果只是在mysqld啟動之後,在 MySQL 命令行中用 SET 語法來更新的話則不起作用。