mysql中character_set_connection的作用


character_set_client = x 
character_set_results = x
character_set_connection = x;

我們常用在mysql操作類中使用這三面,下面大概說下作用:

  character_set_client 客戶端使用的編碼,如GBK, UTF8 比如你寫的sql語句是什么編碼的。
  character_set_results 查詢返回的結果集的編碼(從數據庫讀取的數據是什么編碼的)。
  character_set_connection 連接使用的編碼

它們之前存在一個轉換過程(具本的還請見手冊):

character_set_client -> character_set_connection >內部操作字符集->character_set_results
見一篇文章:http://www.cnblogs.com/discuss/articles/1862248.html
如:utf8->utf8->utf8  gbk->utf8->utf8

類似於gbk->utf8->utf8這樣的轉換,有些同學可能有個疑問:
  character_set_client 是gbk
  character_set_connection 是utf8
  character_set_results 也是utf8
  
  為什么不濾過character_set_connection部分,而它在這個中間階段起到一個什么樣的作用。
google時,http://stackoverflow.com/questions/16082480/what-is-the-purpose-of-character-set-connection
老外也提到過樣的問題,本人英語差得很,也沒怎么看完,最后轉而去看手冊去了。

在手冊中發現一句話:轉換時,服務器使用character_set_connection和collation_connection系統變量。它將客戶端發送的查詢從character_set_client系統變量轉換到character_set_connection(除非字符串文字具有象_latin1或_utf8的引介詞)。collation_connection對比較文字字符串是重要的。對於列值的字符串比較,它不重要,因為列具有更高的 校對規則優先級。
請反復讀下這段話,尤其是紅色部分。現在說下我的理解:我們操作數據庫時,大多於表有關,但是並不是說操作數據庫一定要於表有關,如果使用表,則表和字段的字符集有優先,比如直接select length('中國人'),如果
character_set_connection是utf8的則輸出9,如果是gbk則輸出6。各位可以通過修改字符集變量測試下。我想character_set_connection存在的意義大多是類似於此類用法吧。


如有說的不對的地方,請指正下,或者有更多的說法,也請說下。


免責聲明!

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



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