MySQL的字符集有不少種,每種字符集都有可能有多種校對規則,每種字符集都有一個默認的校對規則。sql
只有基於字符的值才真正有字符集的概念,這些都是在進行相應的運算時體現出來,固然是在MySQL層面的比較。數據庫
MySQL字符集的設定選項有不少,可是採用的自上而下的繼承方式來影響數據庫。服務器
建立數據庫時,根據character_set_server來影響建立數據庫時的默認字符集ide
建立表的時,將根據數據庫的字符集設置來指定表的默認字符集翻譯
建立列的時候,將根據表的字符集來設定列的默認字符集server
當服務器和客戶端通訊的時候,它們可能使用不一樣的字符集,這時,服務器端將進行必要的翻譯轉換工做。繼承
服務器端老是假設客戶端是按照character_set_client的字符集來傳輸數據和sql語句。字符串
服務器收到客戶端的SQL語句時,它先將其轉換成character_set_connection指定的字符集,而且使用這個設置來決定如何將數據轉換成字符串。it
服務器返回數據或者錯誤信息給客戶端的時候,它會將其轉換成character_set_result指定的字符集。io
根據須要,能夠使用set names 或者set character set 語句來改變上面的設置。服務器端上使用這個命令只能改變服務器的設置,客戶端程序和客戶端API也須要使用正確
的字符集才能避免在通訊時出現問題。