1. 程式人生 > >MySQL--字符集參數

MySQL--字符集參數

charsets ive 客戶 char 讀取 data ati ESS sta

==================================================

MySQL字符集相關參數

character_set_client: 表示客戶端請求數據的字符集
character_set_connection:表示客戶端連接到數據庫後傳輸使用的字符集
character_set_database:默認數據庫的字符集,如果創建數據庫時沒有指定字符集,則使用該默認字符集
character_set_filesystem:在操作系統層次上存放文件使用的字符集,默認為二進制
character_set_results:結果集使用的字符集
character_set_server:服務器使用的默認字符集
character_set_system:為存儲系統元數據信息使用的字符集,總是utf8

==================================================

MySQL字符集參數使用

在客戶端與MYSQL服務器建立連接後,執行INSERT操作並返回新插入:
1>MYSQL Client使用character_set_client指定的字符集來編碼請求數據並發送給MYSQL服務器;
2>MYSQL服務器接收到客戶端發送來的請求數據,將數據按照character_set_connection指定的字符集進行解碼;
3>MYSQL服務器執行插入請求,將步驟2中解碼的數據根據對應的列的字符集進行編碼,然後插入數據,寫入到文件中;
4>MYSQL服務器執行查詢請求,將數據從文件中讀取出來,按照對應列的字符集進行解碼;
5>MYSQL服務器將查詢結果按照character_set_results進行編碼,返回給MYSQL Client;

為避免數據庫亂碼問題,應該保證客戶端編碼/服務器character_set_client和對於表上字段的charset使用相同的編碼方式。

==================================================

影響到字符編碼的設置

數據庫級別的字符集信息使用db.opt來存放字符集和校驗字符集的信息,當該數據庫下定義表時未定義字符集,將使用數據庫的字符集。

Session settings
-->character_set_server
-->character_set_client
-->character_set_connection
-->character_set_database
-->character_set_result
Schema level defaults
Table level defaults
Column charsets

==================================================

SET NAMES命令

SET NAMES {‘charset_name‘ [COLLATE ‘collation_name‘] | DEFAULT}
This statement sets the three session system variables character_set_client, character_set_connection, and character_set_results to the given character set. Setting character_set_connection to charset_name also sets collation_connection to the default collation for charset_name.

SET NAMES x相當於執行下面三條語句:
SET character_set_client = x;
SET character_set_results = x;
SET character_set_connection = x;


If you are using the mysql client with auto-reconnect enabled (which is not recommended), it is preferable to use the charset command rather than SET NAMES. 
The charset command issues a SET NAMES statement, and also changes the default character set that is used if mysql reconnects after the connection has dropped.

MySQL--字符集參數