概述:字符集就是一套文字符號及其編碼,比較規則的集合。 Mysql數據庫字符集包括字符集(character)和校對規則(collation)這兩個概念。其中字符集用於定義mysql數據庫的存儲方式,而校對規則是定義字符串的比較方式,而且字符集和校對規則是一對多的關係mysql
查看mysql可用的字符集的命令是show character set;linux
經常使用·字符集sql |
長度數據庫 |
說明緩存 |
GBK服務器 |
2app |
不是國際標準,但支持的系統較多性能 |
UTF-8ui |
3編碼 |
中英文合併,建議使用此字符集 |
utf8mb4 |
4 |
UTF-8 Uniconde |
Lantin1 |
1 |
Mysql默認安裝使用的字符集 |
1)知足應用支持語言的需求,處理各類各樣的文字,支持不一樣語言的國家和地區,應選Unicode字符集,即utf-8。
2)處理數據量較大,且要支持中文,性能要求很高,可選GBK(定長字符集,佔用兩個字節)對大量運算處理,比較排序,更快,更高。
3)移動互聯網業務,建議使用utf8mb4字符集。
show variables like 'character_set%'; +--------------------------+-------------------------------------------+ | Variable_name | Value | +--------------------------+-------------------------------------------+ | character_set_client | utf8 | | character_set_connection | utf8 | | character_set_database | utf8 | | character_set_filesystem | binary | | character_set_results | utf8 | | character_set_server | utf8 | | character_set_system | utf8 | | character_sets_dir | /application/mysql-5.6.36/share/charsets/ |
[root@db01 mysql]# cat /etc/sysconfig/i18n
LANG="zh_CN.UTF-8
mysql> set names utf8;
Query OK, 0 rows affected (0.00 sec)
永久修改:
[client]
default-character-set=utf8
在mysqld下添加default-character-set=utf8
Mysql5.5及其之後版本
[mysqld]
character-set-server=utf8
修改庫:alter database databasename character set ******
修改表:alter table tablename character set ******
庫的修改:
例如:show create database oldboy\G;
*************************** 1. row ***************************
Database: oldboy
Create Database: CREATE DATABASE `oldboy` /*!40100 DEFAULT CHARACTER SET gbk */
1 row in set (0.00 sec)
oldboy數據庫字符集目前是gbk,將其修改成utf8,命令以下;
alter database oldboy character set utf8 collate utf8_general_ci ;
表的修改:
alter table student character set utf8 collate utf8_general_ci ;
說明:如何生產環境中沒有調整好字符集的設定,而運行以後發現知足不了需求而調整,但不想丟失數據的話,能夠進行字符集的修改,直接經過alter database databasename character set ******和alter table tablename character set ******命令進行修改,只能對修改後插入的數據有效,在修改以前插入的數據依然會保留以前的字符集,要想實現對以前數據也能修改字符集,必須將其數據導出,再通過調整從新導入便可。
1) 導出表結構
mysqldump -uroot -p --default-character-set=utf8 -d oldboy>oldboy.sql
說明:--default-character-set=utf8 :以什麼字符集鏈接 -d:只導出表結構,不導出數據
手工修改oldboy.sql表中的字符集爲新的字符集。
2) 確保數據庫再也不更新數據,導出數據。
mysqldump -uroot -p --quick --no-create-info --extended-insert --default-character-set=gbk oldboy>data.sql
參數說明:
--quick:功能是從服務器一次一行檢索表中的行,而不是檢索全部的行,並在輸出前將它緩存到內存中,用於轉儲較大的表。
--extended-insert:使轉儲文件更小,從新載入文件能夠加速插入。
--no-create-info:不會從新建立轉儲表create table語句。
--default-character-set=gbk:保留原有導出數據的字符集,這樣導出的文件不會出現·亂碼。
3)打開data.sql,將set names gbk 修改成 set names utf8
4)使用新的字符集建立新的數據庫
show create database oldboy default charset utf8;
5)建立表結構,執行oldboy.sql。
mysql -uroot -p oldboy<oldboy.sql
6)從新導入數據u,執行data.sql。
mysql -uroot -p oldboy<data.sql