目錄
- 1.MySQL資料庫字符集知識
- 1.1.什么是字符集
- 1.2.MySQL資料庫字符集
- 1.3.常用字符集介紹與選擇建議
- 1.3.1.常用字符集介紹
- 1.3.2.MySQL如何選擇合適的字符集
- 1.3.3.查看MySQL資料庫字符集和校對規則
- 2.MySQL資料庫字符集配置
- 2.1.Linux系統服務端字符集設定
- 2.2.Linux系統客戶端字符集設定
- 2.3.MySQL服務端資料庫字符集設定
- 2.4.MySQL資料庫中的庫的字符集設定
- 2.5.MySQL資料庫表的字符集設定
- 2.6.MySQL資料庫客戶端字符集設定
- 3.防止資料庫的中文顯示亂碼
- 徹底防止MySQL資料庫內的資料中文亂碼方法
- 4.更改MySQL資料庫庫表的字符集
- 4.1.更改庫的字符集
- 4.2.更改表的字符集
- 4.3.生產環境更改資料庫(含資料)字符集的方法
1.MySQL資料庫字符集知識
1.1.什么是字符集
計算機只能識別0和1這樣的二進制數字,無論是處理計算機程式,還是進行科學運算,最終都要轉換為二進制資料來完成操作;例如,我們輸入一個數字“8”,計算機會將其識別成二進制數字“1000”,
但是,計算機要處理的資料不僅僅是數字,還會有字母,為了處理字母,就產生了ASCII碼系統,英文字母共有26種變化,算上大小寫也才52種變化,即使加上特殊的英文標點符號、特殊字符,變化也不多,而用8位二進制數字可以表達256種字符,也就是說,8位二進制數字就足以勝任英文字符的處理作業了,
但是,各個國家的語言文字大多不同,不僅僅是數字、字母以及特殊字符,例如中國的漢字數量就有數萬之多,常用的有幾千個,這時,使用ASCII編碼就會無法滿足需求,于是就有了GBK、BIG5、GB2312這類的字符編碼,采用16位二進制數可以表達65535個漢字,這對于常用的漢字使用來說就足夠用了,
現在,在簡體中文環境下,常用的編碼除了GB2312和GB18030之外,還會用到UTF-8,GBK是專門用作中文的字符編碼規范,UTF是通用轉換格式的縮寫,又可稱為萬國碼,理論上來說,UTF可以表達各種文字的編碼格式,
字符編碼其實就是將人類使用的英文字母、漢字、特殊符號等資訊,通過預先設定的轉換規則,將其轉換為計算機可以識別的二進制數字的一種編碼方式,
1.2.MySQL資料庫字符集
字符集其實就是一套文字符號及編碼,對應的文字及編碼,可以將人類可以識別的內容與計算機可以識別的資訊進行互相轉換,
一個字母表使用了四個字母:A、B、a、b,每個字母賦予一個數值:A=0,B=1,a=2,b=3,字母A是一個符號,數字0是A的編碼,這四個字母和它們的編碼組合在一起就可以稱為一個字符集,
MySQL資料庫的字符集不僅包括字符集(CHARACTER),還包括校對規則(COLLATION),其中,校對規則的作用是定義比較字串的方式,
假設比較兩個字串的值:A和B,最簡單的方法是查找編碼:A為0,B為1,因為0小于1,所以可以說A小于B,所做的僅僅是在字符集上應用了一個校對規則,校對規則是一套規則,作用是對編碼進行比較,
1.3.常用字符集介紹與選擇建議
1.3.1.常用字符集介紹
在作業系統以及各類軟體中都有字符集,MySQL也不例外,
常用字符集知識:
| 常用字符集 | 最大長度 | 說明 |
|---|---|---|
| GB2312 | 2位元組 | 早期制定的標準,不推薦使用 |
| GB18030 | 4位元組 | 受一些系統支持,資料庫支持的不多,不推薦使用 |
| GBK | 2位元組 | 不是國際標準,對中文環境支持的很好,不推薦使用 |
| UTF8 | 3位元組 | 中英文混合的環境,建議使用此字符集,目前使用的比較多,互聯網場景的Linux/UNIX及MySQL都支持UTF8,重點推薦 |
| latin1 | 1位元組 | MySQL系統的默認字符集,不推薦使用 |
| utf8mb4 | 4位元組 | utf8mb4字符集主要從5.5開始被支持,兼容UTF8,且比UTF8能表示更多的字符,正在成為未來趨勢字符集,重點推薦 |
1.3.2.MySQL如何選擇合適的字符集
1、如果存盤的是各種各樣的語言文字,則可以選擇UTF8,這是目前國內應用最為廣泛的字符集,沒有之一,
2、如果只需要支持中文,并且資料量很大,此外,還包含了大量的運算,則可以選擇GBK,理論上其可以獲得更高的性能,但不推薦使用,
3、對于新型的互聯網以及移動互聯網的混合業務,推薦使用utf8mb4字符集替代UTF8字符集,總之,如果沒有極特別的需求,請選擇UTF8或utf8mb4作為資料庫的字符集,
4、如果使用開源程式,則可以根據上述說明進行選擇,如果是公司開發人員自己開發產品,那么選擇權就在開發人員手里,DBA只能提供建議,
1.3.3.查看MySQL資料庫字符集和校對規則
查看當前MySQL系統支持的字符集
MySQL資料庫支持的字符集有很多種,通過命令可以查看當前MySQL支持的字符集:
show character set;
2.MySQL資料庫字符集配置
設定MySQL的字符集需要考慮到很多個層次,將這些需要考慮的層次大概分為7個級別,
1、作業系統級別,
2、作業系統客戶端級別(SSH),
3、MySQL實體級別,
4、資料庫中的庫級別,
5、表級別(含欄位級別),
6、MySQL客戶端級別(連接及回傳結果),
7、程式代碼級別,
2.1.Linux系統服務端字符集設定
很多人在使用MySQL時經常會被中文亂碼所困擾,其中Linux系統和連接Linux系統客戶端的字符集設定可能就是問題之一,對此,要盡量將系統的字符集和系統中軟體的字符集進行統一,設定和生效的方法:
vim /etc/sysconfig/il8n #配置到組態檔里可以永久生效,
LANG="zh_CN.UTF-8" #LANG為系統字符集環境變數,設定為中文UTF8.
SYSFONT="latarcyrheb-sun16"
source /etc/sysconfig/il8n #使得修改生效,
echo $LANG #檢查生效情況,
在Linux服務器里使用MySQL登錄到資料庫,要注意系統字符集的使用,
2.2.Linux系統客戶端字符集設定
常見的連接Linux的客戶端為SecureCRT、XShell,
SecureCRT:會話選項-終端-外觀-字符編碼
XShell:地球-下拉箭頭
2.3.MySQL服務端資料庫字符集設定
設定服務器的字符集有很多種方法,常用的三種方法:
方法一:在編譯安裝MySQL的時候指定服務器端字符集,
cmake .
-DDEFAULT_CHARSET=utf8 \
-DDEFAULT_COLLATION=utf8_general_ci \
-DWITH_EXTRA_CHARSETS=all \
方法二:編譯時沒指定字符集,或者指定了不合適的字符集,也還可以在安裝后修改組態檔,
[mysqld]
character-set-server=utf8
方法三:可以在啟動資料庫時,增加選項指定的字符集,
mysqld --character-set-server=utf8
2.4.MySQL資料庫中的庫的字符集設定
在MySQL中,庫的字符集設定一般是在建庫的時候指定的,如果在建庫的時候未指定,則庫的字符集與MySQL資料庫實體的字符集一致,可通過命令查看當前實體的字符集:
show variables like 'character_set_database%';
show variables like 'collation_database%';
創建資料庫test,并查看建庫的字符集:
create database test;
show create database test\G
在編譯MySQL時,若指定了正確的字符集或者修改組態檔調整過的服務器的字符集,那么,在以后建庫的時候就可以直接執行簡化的命令“create database test;”,
也可以在建庫的時候指定字符集和校對規則來建庫;
create database oldboy default character set utf8 default collate = utf8_general_ci;
"CHARACTER SET UTF8"即為資料庫字符集,而“utf8_general_ci”則為校對規則,
2.5.MySQL資料庫表的字符集設定
建表的字符集與庫的字符集應一致,設定表字符集的命令:
use test;
create table test(id int(4));
show create table test\G;
2.6.MySQL資料庫客戶端字符集設定
對MySQL資料庫客戶端字符集進行設定,對于防止MySQL更新時,出現中文亂碼有極大的影響,設定方法也有幾種,
方法一:臨時生效單條命令法,
set names utf8;
“set names utf8”也可以用三個命令來替代,
set character_set_client = utf8;
set character_set_results = utf8;
set character_set_connection = utf8;
方法二:登錄資料庫時指定字符集,
mysql --default-character-set=utf8;
方法三:通過修改my.cnf實作修改MySQL客戶端的字符集,配置方法,
[client]
default-character-set=utf8
人工登錄資料庫執行“set names UTF8”,以及使用MySQL命令指定字符集登錄操作,或者更改my.cnf組態檔客戶端模塊的引數,來實作更改客戶端字符集,都是改變了MySQL客戶端的client、connection、results3個引數的字符集,
3.防止資料庫的中文顯示亂碼
管理員在配置MySQL資料庫字符集時,需要盡可能地確保7大項字符集統一,對于管理員來說,查看資料庫字符集的基本方法:
show variables like 'character_set%';
character_set_client #客戶端字符集
character_set_connection #客戶端連接字符集
character_set_database #資料庫字符集,組態檔時指定或建庫建表時指定
character_set_filesystem #檔案系統字符集
character_set_results #客戶端回傳結果字符集
character_set_server #服務器字符集,組態檔時指定或建庫建表時指定
character_set_system #系統字符集
更改Linux系統字符集變數之后,可以查看MySQL中字符集的變化,
徹底防止MySQL資料庫內的資料中文亂碼方法
字符集的不一致是資料庫亂碼的罪魁禍首,要想避免MySQL資料庫內的資料中文亂碼方法,就要遵循7大項字符集設定規則,即Linux系統服務端與Linux系統客戶端字符集、MySQL服務端資料庫實體與MySQL資料庫客戶端字符集、MySQL資料庫中的庫和表的字符集、程式代碼的字符集要一致,如果是利用檔案還原資料,還要注意檔案的編碼問題,
4.更改MySQL資料庫庫表的字符集
4.1.更改庫的字符集
管理員可以使用alter命令對資料庫的字符集進行更改:
show create database oldboy\G
alter database oldboy character set latin1 collate = latin1_swedish_ci;
show create database oldboy\G
alter database oldboy character set utf8 collate utf8_general_ci;
show create database oldboy\G
4.2.更改表的字符集
管理員也可以使用alter命令對資料庫的表的字符集進行更改:
use test;
show create table t1\G
alter table t1 character set latin1;
show create table t1\G
4.3.生產環境更改資料庫(含資料)字符集的方法
對于已經包含了資料的庫表,若要對字符集進行調整,就需要將資料先匯出,然后更改資料庫環境,更改建庫和表的字符集之后,重新匯入資料,這樣才能實作相應的調整,
1、確保資料庫不要更新,然后匯出所有資料為SQL的檔案,
2、針對匯出的資料進行字符集替換(替換表和庫),例如把GBK改為UTF8,
3、修改my.cnf組態檔,更改MySQL客戶端及服務端的字符集,重啟生效,
4、匯入更改過新字符集的庫表的資料,包括表結構陳述句,然后提供服務,
5、將作業系統、SSH客戶端,以及程式更改為對應的新字符集,
更改字符集時,要將小的字符集集合更改為大的字符集集合,不然可能會丟失資料,
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/52936.html
標籤:Linux
上一篇:MySQL常用日志檔案知識
下一篇:求幾個可以播放的rtsp公網地址
