MySQL字符集選擇

1、怎樣選擇合適的字符集
對MySQL數據庫來講,字符集很重要,由於數據庫存儲的數據大部分都是各類文字,字符集對數據庫的存儲,處理性能都會有所影響。mysql

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

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

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

4、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)ide

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。code

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

相關文章
相關標籤/搜索