通過MySql.Data.dll向MySql發生Sql時如果sql語句中存在中文,那么發送的MySql服務器時就會變成亂碼。
因為MySQL處理連接時,外部連接發送過來的SQL請求會根據以下順序進行轉換:
character_set_client //客戶連接所采用的字符集
|
character_set_connection //MySQL連接字符集
|
character_set_database //數據庫所采用的字符集(表,列)
|
character_set_results //客戶機顯示所采用的字符集
產生亂碼的根本原因在於:
1.客戶機沒有正確地設置client字符集,導致原先的SQL語句被轉換成connection所指字符集,而這種轉換,是會丟失信息的,如果client是utf8格式,那么如果轉換成gb2312格式,這其中必定會丟失信息,反之則不會丟失。一定要保證connection的字符集大於client字符集才能保證轉換不丟失信息。
2. 數據庫字體沒有設置正確,如果數據庫字體設置不正確,那么connection字符集轉換成database字符集照樣丟失編碼,原因跟上面一樣。
解決辦法:
1. 將服務端mysql.ini 中default-character-set設置為utf8。
default-character-set=utf8
2. 在帶中文的Sql語句前加上
set names 'utf8';
這樣就不會出現亂碼了。