MySQL字符集選擇

一、怎樣選擇合適的字符集
對MySQL數據庫來說,字符集很重要,因爲數據庫存儲的數據大部分都是各種文字,字符集對數據庫的存儲,處理性能都會有所影響。

主要考慮一下幾方面的因素
1.滿足應用支持語言的需求,應用處理各種各樣的文字,發佈到使用不同語言的國家或地區,可以選擇Unicode字符集,MySQL的話可以選擇UTF-8
2.如果應用中涉及已有數據的導入,就要充分考慮數據庫字符集對已有數據的兼容性。
假設數據是GBK文字,如果選擇其他數據庫字符集,就可能導致某些文字無法正確導入的問題。
3.如果數據庫需要支持一般是中文,數據量很大,性能要求也很高,可以選擇雙字節定長編碼的中文字符集,比如GBK。
因爲相對於UTF-8而言,GBK比較小,每個漢字只佔用2個字節,而UTF-8漢字編碼需要3個字節,這樣可以減少磁盤I/O,數據庫緩存,已經網絡傳輸的時間,從而提高性能。
如果是英文字符,僅有少量漢字字符,那麼選擇UTF-8更好。
4.如果數據庫需要做大量的字符運算,如比較、排序,那麼選擇定長字符集可能會更好,因爲定長字符集的處理速度比變長的快。

二、MySQL支持的字符集
MySQL服務器可以支持多種字符集,在同一臺服務器,同一個數據庫,同一個表都可以指定不同的字符集。
查看所有可用字符集的命令 show character set;
例如MySQL5.7支持41種可以用字符集
mysql> show character set;
MySQL字符集選擇

三、MySQL的字符集包括字符集和校對規則
1.字符集用來定義MySQL存儲字符串的方式
2.校對規則用來定義比較字符串的方式。
3.字符集和校對規則是一對多關係
4.每個字符集至少對應一個校對規則
例如:查看gbk的校對
show collation like 'gbk%';
MySQL字符集選擇
校對規則命名約定,它們以字符集名開始,通常包括一個語言名,並且以_ci(大小寫不敏感)、_cs(大小寫敏感)或者_bin(二元)

四、MySQL字符集的設置
1.MySQL的字符集和校對規則有4個級別的默認設置,服務器級、數據庫級、表級、和字段級。
2.服務器字符集和校對規則
默認服務器字符集使用latin1
MySQL字符集選擇

可以在my.cnf中設置服務器字符集,設置完重啓就生效
[mysqld]
character-set-server=utf8

  1. 查看當前服務器的字符集

mysql> show variables like 'character_set_server';
+----------------------+-------+
| Variable_name | Value |
+----------------------+-------+
| character_set_server | utf8 |
+----------------------+-------+
1 row in set (0.00 sec)

4.查看當前服務器的校對規則
mysql> show variables like 'collation_server';
+------------------+-----------------+
| Variable_name | Value |
+------------------+-----------------+
| collation_server | utf8_general_ci |
+------------------+-----------------+
1 row in set (0.00 sec)

注意:創建完數據庫要修改字符集,可以使用alter db_name character set
但是數據庫裏面存在數據,就不能將已有的數據按照新的字符集進行存放,所以不能修改數據庫字符集直接修改數據的內容。

5.連接字符集和校對規則
客戶端和服務器的交互操作,MySQL提供了3個不同的參數:character_set_client,character_set_connection和character_set_result。
分別代表客戶端、連接和返回結果的字符集
通常這個3個字符集應該相同的,纔可以確保用戶寫入的數據可以正確讀出
可以在my.cnf中設置
[mysql]
default-character-set=utf8
這樣服務器啓動後,所有連接默認就是使用utf8字符集進行連接的,而不需要在程序中執行set names。

五、字符集的修改步驟
alter database db_name character set = utf8;
alter table table_name character set = utf8;

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