連接字符集和校對
· 服務器字符集和校對規則可以用作character_set_server和collation_server變量的值。
· 默認數據庫的字符集和校對規則可以用作character_set_database和collation_database變量的值。
在客戶端和服務器的連接處理中也涉及了字符集和校對規則變量。每一個客戶端有一個連接相關的字符集和校對規則變量。
考慮什麼是一個“連接”:它是連接服務器時所作的事情。客戶端發送SQL語句,例如查詢,通過連接發送到服務器。服務器通過連接發送響應給客戶端,例如結果集。對於客戶端連接,這樣會導致一些關於連接的字符集和 校對規則的問題,這些問題均能夠通過系統變量來解決:
· 當查詢離開客戶端後,在查詢中使用哪種字符集?
服務器使用character_set_client變量作爲客戶端發送的查詢中使用的字符集。
· 服務器接收到查詢後應該轉換爲哪種字符集?
轉換時,服務器使用character_set_connection和collation_connection系統變量。它將客戶端發送的查詢從character_set_client系統變量轉換到character_set_connection(除非字符串文字具有象_latin1或_utf8的引介詞)。collation_connection對比較文字字符串是重要的。對於列值的字符串比較,它不重要,因爲列具有更高的 校對規則優先級。
· 服務器發送結果集或返回錯誤信息到客戶端之前應該轉換爲哪種字符集?
character_set_results變量指示服務器返回查詢結果到客戶端使用的字符集。包括結果數據,例如列值和結果元數據(如列名)。
你能夠調整這些變量的設置,或可以依賴默認值(這樣,你可以跳過本章)。
有兩個語句影響連接字符集:
SET NAMES 'charset_name'
SET CHARACTER SET charset_name
SET NAMES顯示客戶端發送的SQL語句中使用什麼字符集。因此,SET NAMES 'cp1251'語句告訴服務器“將來從這個客戶端傳來的信息採用字符集cp1251”。它還爲服務器發送回客戶端的結果指定了字符集。(例如,如果你使用一個SELECT語句,它表示列值使用了什麼字符集。)