一、查看character_set 變量
show variables like '%char%';
二、對8個變量解釋
變量名 | 解釋 |
character_set_client | 主要用來設置客戶端使用的字符集。 |
character_set_connection | 主要用來設置連接數據庫時的字符集,如果程序中沒有指明連接數據庫使用的字符集類型則按照這個字符集設置。 |
character_set_database | 主要用來設置默認創建數據庫的編碼格式,如果在創建數據庫時沒有設置編碼格式,就按照這個格式設置。 |
character_set_filesystem | 文件系統的編碼格式,把操作系統上的文件名轉化成此字符集,即把 character_set_client轉換character_set_filesystem, 默認binary是不做任何轉換的。 |
character_set_results | 數據庫給客戶端返回時使用的編碼格式,如果沒有指明,使用服務器默認的編碼格式。 |
character_set_server | 服務器安裝時指定的默認編碼格式,這個變量建議由系統自己管理,不要人爲定義。 |
character_set_system | 數據庫系統使用的編碼格式,這個值一直是utf8,不需要設置,它是爲存儲系統元數據的編碼格式。 |
character_sets_dir | 這個變量是字符集安裝的目錄。 |
以上這些參數如何起作用:
1.庫、表、列字符集的由來
①建庫時,若未明確指定字符集,則採用character_set_server指定的字符集。
②建表時,若未明確指定字符集,則採用當前庫所採用的字符集。
③新增時,修改表字段時,若未明確指定字符集,則採用當前表所採用的字符集。
2.更新、查詢涉及到得字符集變量
更新流程字符集轉換過程:character_set_client-->character_set_connection-->表字符集。
查詢流程字符集轉換過程:表字符集-->character_set_result
3.character_set_database
當前默認數據庫的字符集,比如執行use xxx後,當前數據庫變爲xxx,若xxx的字符集爲utf8,那麼此變量值就變爲utf8(供系統設置,無需人工設置)。
三、更改上述字符集
set character_set_XXX = “utf8”;
//xxx:是變量名,選擇自己需要修改的補充。
四、MySQL字符編碼轉換原理
mysql Server收到請求時將請求數據從 character_set_client 轉換爲 character_set_connection
進行內部操作前將請求數據從 character_set_connection 轉換爲內部操作字符集,步驟如下
A. 使用每個數據字段的 CHARACTER SET 設定值;
B. 若上述值不存在,則使用對應數據表的字符集設定值
C. 若上述值不存在,則使用對應數據庫的字符集設定值;
D. 若上述值不存在,則使用 character_set_server 設定值。
最後將操作結果從內部操作字符集轉換爲 character_set_results
友情參考:MySQL之字符集-校對規則