Open source are the greatest wealth---WANGPENG
          posts - 46, comments - 11, trackbacks - 0, articles - 0
             :: 首頁 :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理

          [轉(zhuǎn)載]MySQL字符集設(shè)定總結(jié)

          Posted on 2009-08-13 11:57 WANGPENG 閱讀(214) 評論(0)  編輯  收藏 所屬分類: DataBase

          MySQL(4.1以后版本) 服務(wù)器中有六個關(guān)鍵位置使用了字符集的概念,他們是:client 、connection、databaseresults、server system.MySQL有兩個字符集概念:一個就是字符集本身,一個是字符集校驗規(guī)則.字符集影響數(shù)據(jù)在傳輸和存儲過程中的處理方式,而字符集校驗則影響ORDER BYGROUP BY這些排序方式.

          1.和存儲有關(guān)的
          服務(wù)器字符集 (@@character_set_server)
          庫字符集
          (@@character_set_database)
          表字符集

          字段字符集

          character_set_server: 服務(wù)器安裝時指定的默認(rèn)字符集設(shè)定.
          character_set_database
          : 數(shù)據(jù)庫服務(wù)器中某個庫使用的字符集設(shè)定,如果建庫時沒有指明,將使用服務(wù)器安裝時指定的字符集設(shè)置.
          character_s
          ystem: 數(shù)據(jù)庫系統(tǒng)使用的字符集設(shè)定.

          在創(chuàng)建一個表的時候,每個字段只要不是binary,都會有一個字符集.如果不指定,那么在SHOW CREATE TABLE的時候,它是不會顯示出來的.
          建表時候,字段字符集的選取方式如下:

          * if 字段指定的字符集
          * else if
          表指定的字符集
          * else if @@character_set_database
          * else @@character_set_server (
          如果沒有設(shè)定,這個值為latin1)

          2.和傳輸有關(guān)的
          @@
          character_set_connection
          @@character_set_results
          @@character_set_client

          character_set_connection: 連接數(shù)據(jù)庫的字符集設(shè)置類型,如果php沒有指明連接數(shù)據(jù)庫使用的字符集類型就按照服務(wù)器端默認(rèn)的字符設(shè)置
          character_set_results: 數(shù)據(jù)庫給客戶端返回時使用的字符集設(shè)定,如果沒有指明,使用服務(wù)器默認(rèn)的字符集

          character_set_client:
          客戶端使用的字符集,相當(dāng)于網(wǎng)頁中的字符集設(shè)置

          3.字符集的校對規(guī)則
          字符集的校對規(guī)則設(shè)定分別由上面的
          character_set_connection, character_set_database, character_set_server決定

          collation_connection: 連接字符集的校對規(guī)則
          collation_database
          :
          默認(rèn)數(shù)據(jù)庫使用的校對規(guī)則.當(dāng)默認(rèn)數(shù)據(jù)庫改變時服務(wù)器則設(shè)置該變量.如果沒有默認(rèn)數(shù)據(jù)庫,變量的值同collation_server
          collation_server: 服務(wù)器的默認(rèn)校對規(guī)則

          以上內(nèi)容中character_set_client,character_set_connection,character_set_results受客戶端默認(rèn)字符集影響,其中php編譯mysql模塊時的默認(rèn)字符集同樣也受到它鏈接的mysql動態(tài)庫影響,從而影響到phpcharacter_set_connection, character_set_client設(shè)定.當(dāng)默認(rèn)字符集不是utf8時,設(shè)置my.cnf

          [mysqld]
          default-character-set=utf8

          default-collation=utf8_general_ci

          default-character-set只能改變對存儲層(server,database,table,column,system)的設(shè)定,對于客戶端和服務(wù)器端的通訊層沒有任何影響.
          mysql> SHOW VARIABLES LIKE ‘character_set_%’;

          +————————–+—————————————————————————+
          | Variable_name| Value|
          +————————–+—————————————————————————+
          | character_set_client| latin1|
          | character_set_connection | latin1|
          | character_set_database| utf8|
          | character_set_filesystem | binary|
          | character_set_results| latin1|
          | character_set_server| utf8|

          | character_set_system| utf8

          解決字符集通訊設(shè)置不匹配的方法:
          (
          修改默認(rèn)的character_set_client,character_set_connection,character_set_result)

          1. 重新編譯mysqlphp,mysql加入編譯參數(shù) –default-character-set=utf8
          2.
          PHP程序在查詢數(shù)據(jù)庫之前,執(zhí)行mysql_query(”set names utf8;”);
          3.
          修改my.cnf,在[mysqld]中加入init-connect=”set names utf8” (對于超級用戶連接該選項無效)
          4.
          啟動mysqld 加入?yún)?shù) –skip-character-set-client-handshake忽略客戶端字符集

          主站蜘蛛池模板: 梁河县| 巫溪县| 兴宁市| 金堂县| 永康市| 石屏县| 沈阳市| 宜昌市| 巴林左旗| 蓝山县| 防城港市| 疏勒县| 清苑县| 奈曼旗| 绥中县| 乐东| 彰化市| 东光县| 新晃| 县级市| 开江县| 砀山县| 凉山| 滨州市| 普兰店市| 修文县| 乡宁县| 西昌市| 大连市| 泸州市| 昌吉市| 延津县| 凤冈县| 西城区| 鄂尔多斯市| 剑川县| 纳雍县| 萨嘎县| 汉阴县| 屯门区| 同德县|