1. 程式人生 > >【0012】mysql字符集和排序規則

【0012】mysql字符集和排序規則

1.關於字符集和排序規則

所為字符集,就是用來定義字元在資料庫中的編碼的集合。常見的字符集有:utf8(支援中文)和AccIS(不支援中文)

資料庫中的排序規則用來定義字元在進行排序和比較的時候的一種規則。常見的如下:
(1) utf8_general_ci 不區分大小寫,utf8_general_cs 區分大小寫
(2) utf8_bin 規定每個字串用二進位制編碼儲存,區分大小寫,可以直接儲存二進位制的內容

說明:所為排序規則,就是指字元比較時是否區分大小寫,以及是按照字元編碼進行比較還是直接用二進位制資料比較。

utf8_unicode_ci和utf8_general_ci對中、英文來說沒有實質的差別。
utf8_general_ci校對速度快,但準確度稍差。
utf8_unicode_ci準確度高,但校對速度稍慢。

如果你的應用有德語、法語或者俄語,請一定使用utf8_unicode_ci。一般用utf8_general_ci就夠了。

所以一般字符集用utf-8,排序規則用utf8_general_ci

2、繼承關係

mysql對伺服器的每個資料庫、每個表都有預設的字符集和排序規則。這形成了建立列時影響其字符集的預設值的繼承關係。 在繼承的每一個層次,都可以顯示的定義字符集或讓伺服器使用預設值: 1.當建立一個數據庫的時候,他從伺服器繼承了character_set_server設定; 2.當建立表的時候,他從資料庫繼承字符集; 3.當建立列時,它從表繼承字符集; 3、檢視字符集和排序規則有關的系統變數 字符集
show variables like 'character\_set\_%'; 

排序規則
show variables like 'collation\_%'; 


4、各系統變數含義

character_set_system:MySQL資料庫識別符號使用的字符集,永遠是utf8 character_set_server和collation_server:伺服器的預設字符集和排序方式 character_set_database和collation_database:當前資料庫的預設字符集和排序方式 以下三個變數將影響客戶端和伺服器之間的通訊: character_set_client:客戶端向伺服器傳送SQL語句使用的字符集 character_set_results:伺服器向客戶端返回結果時使用的字符集 character_set_connection:如果它和character_set_client不同,從客戶端發來的SQL語句將轉換為它指定的字符集 預設情況下,上述三個變數都設為為相同的值,

5、修改預設字符集和排序規則

其實也就是修改伺服器端的。這樣下面3層都會繼承。 這裡打算修改字符集為utf-8,排序規則為utf8_general_ci 開啟mysql安裝目錄下my.ini檔案,在最下面新增(mysqld組下) character-set-server=utf8
collation_server=utf8_general_ci


儲存my.ini。關閉mysql伺服器,重新開啟。再用navicat查詢工具輸入上面的查詢語句即可看到修改成功。

對比未修改預設字符集和排序規則前的查詢結果,會發現 字符集中: character_set_server 和 character_set_database 變了。因為資料庫的字符集是繼承伺服器的。
排序規則中: collation_server 和 collation_database 變了。同樣,因為資料庫的排序規則是繼承伺服器的。