mysql數據庫的字符集相關

數據庫的字符集

在平時的數據庫操作中,亂碼問題是我們經常遇到的一個問題,而亂碼其實就是字符集設置的不合適導致的。因此這裏整理下數據庫相關的字符集。

查看數據庫當前支持的字符集


Default collation 爲校對規則,以此決定字符的等價關係和大小關係。 其中ci是case insensitive即大小寫不敏感, cs 爲case sensitive 即大小寫敏感。 

MaxLen是用於存儲一個字符的最大的字節數目

字符集相關的變量

查看數據庫的字符集相關的變量如下:


 

參數
說明
character_set_client 客戶端發送過來的數據使用的字符集
character_set_connection 連接層字符集
character_set_database 當前選中數據庫的默認字符集
character_set_filesystem 把os上文件名轉化成此字符集,即把 character_set_client轉換character_set_filesystem, 默認binary是不做任何轉換的
character_set_results 查詢結果字符集
character_set_server 默認的內部操作字符集
character_set_system 系統元數據(字段名等)字符集

 

在MYSQL數據庫中,提供了4中粒度的字符集。 

  1. server:整個實例
  2. database:數據庫
  3. table:表
  4. column: 列

上述4中的作用域依次遞減、但是優先級依次遞增。

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


SET NAMES

mysql的配置文件或者啓動時指定參數可以設置好mysql的上述參數。

同時還可以使用一些命令來設置當前會話使用的字符集,

常用的有SET NAMES


設置後


通過上述示例可以看出set names xxx 等價於同時設置 character_set_client、character_set_connection、character_set_results

上述設置只對當前會話生效。

SET CHARACTER SET

另外還有SET  CHARACTER SET來設置

設置前:


設置後:(當前選中的數據庫的的字符集爲utf8)


即 SET CHARACTER SET X的效果相當於同時設置下列:

SET character_set_client = X

character_set_results = X

character_set_connection = @@character_set_database (全局的character_set_database值)

 

 

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

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

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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章