數據庫的字符集
在平時的數據庫操作中,亂碼問題是我們經常遇到的一個問題,而亂碼其實就是字符集設置的不合適導致的。因此這裏整理下數據庫相關的字符集。
查看數據庫當前支持的字符集
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中粒度的字符集。
- server:整個實例
- database:數據庫
- table:表
- 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