MySQL字符集選擇
對MySQL數據庫來說,字符集很重要,因為數據庫存儲的數據大部分都是各種文字,字符集對數據庫的存儲,處理性能都會有所影響。
主要考慮一下幾方面的因素
1.滿足應用支持語言的需求,應用處理各種各樣的文字,發布到使用不同語言的國家或地區,可以選擇Unicode字符集,MySQL的話可以選擇UTF-8
2.如果應用中涉及已有數據的導入,就要充分考慮數據庫字符集對已有數據的兼容性。
假設數據是GBK文字,如果選擇其他數據庫字符集,就可能導致某些文字無法正確導入的問題。
3.如果數據庫需要支持一般是中文,數據量很大,性能要求也很高,可以選擇雙字節定長編碼的中文字符集,比如GBK。
如果是英文字符,僅有少量漢字字符,那麽選擇UTF-8更好。
4.如果數據庫需要做大量的字符運算,如比較、排序,那麽選擇定長字符集可能會更好,因為定長字符集的處理速度比變長的快。
二、MySQL支持的字符集
MySQL服務器可以支持多種字符集,在同一臺服務器,同一個數據庫,同一個表都可以指定不同的字符集。
查看所有可用字符集的命令 show character set;
例如MySQL5.7支持41種可以用字符集
mysql> show character set;
三、MySQL的字符集包括字符集和校對規則
1.字符集用來定義MySQL存儲字符串的方式
2.校對規則用來定義比較字符串的方式。
3.字符集和校對規則是一對多關系
4.每個字符集至少對應一個校對規則
例如:查看gbk的校對
show collation like ‘gbk%‘;
校對規則命名約定,它們以字符集名開始,通常包括一個語言名,並且以_ci(大小寫不敏感)、_cs(大小寫敏感)或者_bin(二元)
四、MySQL字符集的設置
1.MySQL的字符集和校對規則有4個級別的默認設置,服務器級、數據庫級、表級、和字段級。
2.服務器字符集和校對規則
默認服務器字符集使用latin1
可以在my.cnf中設置服務器字符集,設置完重啟就生效
character-set-server=utf8
- 查看當前服務器的字符集
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;
MySQL字符集選擇