mysql字元集小結

來源:互聯網
上載者:User

標籤:

author:skate
time:2013/04/09

mysql字元集小結

 

今天同事阿傑兄發現內部一台mysql測試伺服器亂碼,以前也記錄過關於字元集的,今天再補充下

 

修改mysql的字元集和預設儲存引擎
http://blog.csdn.net/wyzxg/article/details/7581415

 

查看庫現有的字元集:
mysql> show variables like ‘%char%‘;
+--------------------------+------------------------------+
| Variable_name            | Value                        |
+--------------------------+------------------------------+
| character_set_client     | latin1                       |
| character_set_connection | latin1                       |
| character_set_database   | latin1                       |
| character_set_filesystem | binary                       |
| character_set_results    | latin1                       |
| character_set_server     | latin1                       |
| character_set_system     | utf8                         |
| character_sets_dir       | /mysql/share/mysql/charsets/ |


mysql和字元集有關的變數
character_set_client:用戶端請求資料的字元集
character_set_connection:從用戶端接收到資料,然後傳輸的字元集
character_set_database:預設資料庫的字元集,無論預設資料庫如何改變,都是這個字元集;如果沒有預設資料庫,那就使用 character_set_server指定的字元集,

                                               這個變數建議由系統自己管理,不要人為定義。
character_set_filesystem:把os上檔案名稱轉化成此字元集,即把 character_set_client轉換character_set_filesystem, 預設binary是不做任何轉換的
character_set_results:結果集的字元集
character_set_server:資料庫伺服器的預設字元集
character_set_system:這個值總是utf8,不需要設定,是為儲存系統中繼資料的字元集

 

一個完整的使用者請求的字元集轉換流程是
   1) mysql Server收到請求時將請求資料從character_set_client轉換為character_set_connection
   2) 進行內部操作前將請求資料從character_set_connection轉換為內部操作字元集,步驟如下
        A. 使用每個資料欄位的CHARACTER SET設定值;
        B. 若上述值不存在,則使用對應資料表的字元集設定值
        C. 若上述值不存在,則使用對應資料庫的字元集設定值;
        D. 若上述值不存在,則使用character_set_server設定值。
   3) 最後將操作結果從內部操作字元集轉換為character_set_results


  
假如我們要想設定的字元集是utf8的話,步驟如下:

1)修改設定檔
在[client]下添加如下參數,影響系統變數character_set_client和character_set_connection和character_set_results
default-character-set=utf8

在[mysqld]下添加如下參數,影響系統變數character_set_server和character_set_database
default-character-set=utf8

設定完後,啟動mysql,我們只需要查看系統變數是否符合我們的要求即可
character_set_client    
character_set_connection
character_set_database  
character_set_results   
character_set_server

如下三個系統變數不需要關心,不會影響亂碼
character_set_filesystem    
character_set_system    
character_sets_dir        

 

修改結果:
mysql> show variables like ‘%char%‘;
+--------------------------+------------------------------+
| Variable_name            | Value                        |
+--------------------------+------------------------------+
| character_set_client     | utf8                         |
| character_set_connection | utf8                         |
| character_set_database   | utf8                         |
| character_set_filesystem | binary                       |
| character_set_results    | utf8                         |
| character_set_server     | utf8                         |
| character_set_system     | utf8                         |
| character_sets_dir       | /mysql/share/mysql/charsets/ |

 

到這就完了嗎?我們還沒有調整字元序(collation),字元序確定在同一字元集內字元之間的比較規則

 

mysql> show variables like ‘%colla%‘;
+----------------------+-------------------+
| Variable_name        | Value             |
+----------------------+-------------------+
| collation_connection | utf8_general_ci   |
| collation_database   | utf8_general_ci   |
| collation_server     | utf8_general_ci   |
+----------------------+-------------------+


collation_connection:在設定檔裡調整[client]default-character-set就可以控制這個參數
collation_server:設定檔裡調整[mysqld]collation_server=utf8_general_ci,一定要和[mysqld]default-character-set使用相同字元集
collation_database:在設定檔裡調整[mysqld]default-character-set就可以控制這個參數


總的來說要想把字元集調整為utf8的話,在設定檔裡需要添加如下幾項

[client]
default-character-set=utf8

[mysqld]
default-character-set=utf8
collation_server=utf8_general_ci


命令說明:
mysql> SET NAMES ‘utf8‘;  它相當於下面的三句命令,當如下三個變數不一致,或顯示亂碼時,可以用這個命令

mysql> SET character_set_client = utf8; 
mysql> SET character_set_results = utf8;  
mysql> SET character_set_connection = utf8;

查看安裝的字元序
mysql> show collation;
查看安裝的字元集
mysql> show character set;

 

參考:
http://dev.mysql.com/doc/refman/5.6/en/server-system-variables.html

 來自:http://blog.csdn.net/wyzxg/article/details/8779682

mysql字元集小結

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.