MySQL數(shù)據(jù)庫字符集的默認配置:
在mysql的配置文件中把默認的字符集改成utf8,這樣創(chuàng)建數(shù)據(jù)庫和表的時候,默認的字符集就是utf8。
MySQL的幾個變量:
當一個 PHP 程序與 MySQL 建立連接后,這個程序發(fā)送給 MySQL 的數(shù)據(jù)采用的是什么字符集?mysql如何檢測并判斷使用何種字符集?要注意以下幾個變量:
character_set_server:這是設(shè)置服務(wù)器使用的字符集
character_set_database:這是設(shè)置數(shù)據(jù)庫使用的字符集
character_set_client :這是設(shè)置客戶端發(fā)送Query串使用的字符集
character_set_connection :這是設(shè)置服務(wù)器需要將收到的查詢串轉(zhuǎn)換成的字符集
character_set_results :這是設(shè)置服務(wù)器要將結(jié)果數(shù)據(jù)轉(zhuǎn)換到的字符集,轉(zhuǎn)換后才發(fā)送給客戶端
因為配置文件設(shè)置的 default_character_set 是 utf8,數(shù)據(jù)表默認采用的就是 utf-8 建立的。這也應(yīng)該是所有采用 MySQL 4.1 的主機提供商應(yīng)該采用的配置。所以我們要保證的只是客戶端與 MySQL 交互之間指定編碼的正確。
這只有兩種可能,客戶端以 gb2312 格式發(fā)送數(shù)據(jù),或者以 utf-8 格式發(fā)送數(shù)據(jù)。
如果以 gb2312 格式發(fā)送:
都是可以的,都能夠保證數(shù)據(jù)在編碼轉(zhuǎn)換中不出現(xiàn)丟失,也就是保證存儲入數(shù)據(jù)庫的是正確的內(nèi)容。
怎么保證取出的是正確的內(nèi)容呢?考慮到絕大部分客戶端 (包括 WP),發(fā)送數(shù)據(jù)的編碼也就是它所希望收到數(shù)據(jù)的編碼,所以:
可 以保證取出給瀏覽器顯示的格式就是 gb2312。不過這樣的缺點是不論是插入、更新、刪除還是查詢操作,只要是操縱數(shù)據(jù)庫,都要先執(zhí)行SET NAMES “gb2312″,這樣才能保證插入和顯示的正確性。如果插入操作前沒有執(zhí)行這條語句,僅在查詢時執(zhí)行該語句,則仍然無法保證顯示的正確性。
如果是第二種情況,客戶端以 utf-8 格式發(fā)送 (WP 的默認情況),可以采用下述配置:
這個配置就等價于 SET NAMES ‘utf8′。