mysql字符集小結

http://blog.csdn.net/wyzxg/article/details/8779682html

author:skate
time:2013/04/09mysql

mysql字符集小結sql

 

今天同事阿杰兄發現內部一臺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指定的字符集,spa

                                               這個變量建議由系統本身管理,不要人爲定義。
character_set_filesystem:把os上文件名轉化成此字符集,即把 character_set_client轉換character_set_filesystem, 默認binary是不作任何轉換的
character_set_results:結果集的字符集
character_set_server:數據庫服務器的默認字符集
character_set_system:這個值老是utf8,不須要設置,是爲存儲系統元數據的字符集.net

 

一個完整的用戶請求的字符集轉換流程是
   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_resultsserver


   
假如咱們要想設定的字符集是utf8的話,步驟以下:htm

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

相關文章
相關標籤/搜索