mysql中變量character_set_connection的具體作用


如題。通常的使用中,character_set_client,character_set_connection這兩個變量的值是一樣的,也就是說查詢不需要進行編碼轉換。這樣看來變量character_set_connection有些多余。當查詢進入時,查詢會被服務器從character_set_client轉換到character_set_connection,當查詢執行時,查詢會被服務器從character_set_connection轉換到列字符集。查詢反回時,數據直接被服務器從列字符集轉換到character_set_results。很顯然查詢進入比查詢返回多經歷了一次轉換,這是必須的嗎,意義何在?

參考mysql中文手冊:

10.3.6. 連接字符集和校對
一些字符集和校對規則系統變量與客戶端和服務器的交互有關。在前面的章節中已經提到過部分內容:
·         服務器字符集和校對規則可以用作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變量指示服務器返回查詢結果到客戶端使用的字符集。包括結果數據,例如列值和結果元數據(如列名)。

這個是mysql的字符集機制,還是有一定作用的

這樣做,允許不同的客戶端具有不同的字符集。典型的例子就是,我有一個utf-8的站點,這個站點就是一個charset client為utf-8的客戶端。與此同時,我有可能需要在一個gbk的終端上讀寫數據庫,這又是一個客戶端,不過它的字符集是gbk。

 

不同的連接,它們都有各自的character_set_client,character_set_connection,互不相關。你上面所說的那種需求,我感覺即使沒有character_set_connection,只需要character_set_client一樣可以實現。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM