mysql語句:SET NAMES UTF8
一直以來只知道mysql_query("SET NAMES UTF8");是設定數據庫編碼的,但是一直不清楚“SET NAMES UTF8”是什麼。
直到今天才知道 SET NAMES ...是mysql語句。
真的感覺到自己的功課還沒做到家,現有知識儲備比較匮乏。現將所查相關資料記下:
www.2cto.com
1、SET NAMES ‘charset_name’
SET NAMES顯示客戶端發送的SQL語句中使用什麼字符集。因此,SET NAMES 'cp1251'語句告訴服務器將來從這個客戶端傳來的信息采用字符集cp1251”。它還為服務器發送回客戶端的結果指定了字符集。(例如,如果你使用一個SELECT語句,它表示列值使用了什麼字符集。)
2、連接字符集和校對
(1) 一些字符集和校對規則系統變量與客戶端和服務器的交互有關。
· 服務器字符集和校對規則可以用作character_set_server和collation_server變量的值。
· 默認數據庫的字符集和校對規則可以用作character_set_database和collation_database變量的值。
在客戶端和服務器的連接處理中也涉及了字符集和校對規則變量。
每一個客戶端有一個連接相關的字符集和校對規則變量。
www.2cto.com
(2)考慮什麼是一個“連接”:它是連接服務器時所作的事情。
客戶端發送SQL語句,例如查詢,通過連接發送到服務器。
服務器通過連接發送響應給客戶端,例如結果集。
對於客戶端連接,這樣會導致一些關於連接的字符集和 校對規則的問題,這些問題均能夠通過系統變量來解決:
(3) 當查詢離開客戶端後,在查詢中使用哪種字符集?
服務器使用character_set_client變量作為客戶端發送的查詢中使用的字符集。
(4) 服務器接收到查詢後應該轉換為哪種字符集?
轉換時,服務器使用character_set_connection和collation_connection系統變量。它將客戶端發送的查詢從character_set_client系統變量轉換到character_set_connection(除非字符串文字具有象_latin1或_utf8的引介詞)。collation_connection對比較文字字符串是重要的。對於列值的字符串比較,它不重要,因為列具有更高的 校對規則優先級。
(5)服務器發送結果集或返回錯誤信息到客戶端之前應該轉換為哪種字符集?
character_set_results變量指示服務器返回查詢結果到客戶端使用的字符集。包括結果數據,例如列值和結果元數據(如列名)。
www.2cto.com
示例:
mysql_query("set names 'utf8'"); //使用utf8編碼;