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

          [轉載]MySQL字符集設定總結

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

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

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

          字段字符集

          character_set_server: 服務器安裝時指定的默認字符集設定.
          character_set_database
          : 數據庫服務器中某個庫使用的字符集設定,如果建庫時沒有指明,將使用服務器安裝時指定的字符集設置.
          character_s
          ystem: 數據庫系統使用的字符集設定.

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

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

          2.和傳輸有關的
          @@
          character_set_connection
          @@character_set_results
          @@character_set_client

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

          character_set_client:
          客戶端使用的字符集,相當于網頁中的字符集設置

          3.字符集的校對規則
          字符集的校對規則設定分別由上面的
          character_set_connection, character_set_database, character_set_server決定

          collation_connection: 連接字符集的校對規則
          collation_database
          :
          默認數據庫使用的校對規則.當默認數據庫改變時服務器則設置該變量.如果沒有默認數據庫,變量的值同collation_server
          collation_server: 服務器的默認校對規則

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

          [mysqld]
          default-character-set=utf8

          default-collation=utf8_general_ci

          default-character-set只能改變對存儲層(server,database,table,column,system)的設定,對于客戶端和服務器端的通訊層沒有任何影響.
          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

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

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

          主站蜘蛛池模板: 济宁市| 左云县| 绥滨县| 左权县| 栖霞市| 铁岭县| 长宁县| 徐汇区| 浮山县| 五原县| 郧西县| 甘洛县| 涿州市| 西宁市| 曲水县| 张掖市| 博野县| 三穗县| 孟津县| 资兴市| 上高县| 靖远县| 丹巴县| 社旗县| 东辽县| 临潭县| 垫江县| 罗城| 长武县| 上犹县| 务川| 南汇区| 鹤山市| 楚雄市| 白城市| 长治市| 望江县| 湛江市| 濮阳县| 洛川县| 尼木县|