程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> MYSQL數據庫 >> MySQL綜合教程 >> mysql中character_set_connection的作用,mysqlcharacterset

mysql中character_set_connection的作用,mysqlcharacterset

編輯:MySQL綜合教程

mysql中character_set_connection的作用,mysqlcharacterset


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存在的意義大多是類似於此類用法吧。


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

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved