日韩黑丝制服一区视频播放|日韩欧美人妻丝袜视频在线观看|九九影院一级蜜桃|亚洲中文在线导航|青草草视频在线观看|婷婷五月色伊人网站|日本一区二区在线|国产AV一二三四区毛片|正在播放久草视频|亚洲色图精品一区

分享

MySQL數(shù)據(jù)庫字符集

 小世界的野孩子 2022-06-19 發(fā)布于北京
目錄

1.MySQL數(shù)據(jù)庫字符集知識

1.1.什么是字符集

計算機(jī)只能識別0和1這樣的二進(jìn)制數(shù)字,無論是處理計算機(jī)程序,還是進(jìn)行科學(xué)運(yùn)算,最終都要轉(zhuǎn)換為二進(jìn)制數(shù)據(jù)來完成操作;例如,我們輸入一個數(shù)字“8”,計算機(jī)會將其識別成二進(jìn)制數(shù)字“1000”。

但是,計算機(jī)要處理的數(shù)據(jù)不僅僅是數(shù)字,還會有字母,為了處理字母,就產(chǎn)生了ASCII碼系統(tǒng)。英文字母共有26種變化,算上大小寫也才52種變化,即使加上特殊的英文標(biāo)點(diǎn)符號、特殊字符,變化也不多,而用8位二進(jìn)制數(shù)字可以表達(dá)256種字符,也就是說,8位二進(jìn)制數(shù)字就足以勝任英文字符的處理工作了。

但是,各個國家的語言文字大多不同,不僅僅是數(shù)字、字母以及特殊字符。例如中國的漢字?jǐn)?shù)量就有數(shù)萬之多,常用的有幾千個。這時,使用ASCII編碼就會無法滿足需求,于是就有了GBK、BIG5、GB2312這類的字符編碼,采用16位二進(jìn)制數(shù)可以表達(dá)65535個漢字,這對于常用的漢字使用來說就足夠用了。

現(xiàn)在,在簡體中文環(huán)境下,常用的編碼除了GB2312和GB18030之外,還會用到UTF-8。GBK是專門用作中文的字符編碼規(guī)范,UTF是通用轉(zhuǎn)換格式的縮寫,又可稱為萬國碼,理論上來說,UTF可以表達(dá)各種文字的編碼格式。

字符編碼其實(shí)就是將人類使用的英文字母、漢字、特殊符號等信息,通過預(yù)先設(shè)定的轉(zhuǎn)換規(guī)則,將其轉(zhuǎn)換為計算機(jī)可以識別的二進(jìn)制數(shù)字的一種編碼方式。

1.2.MySQL數(shù)據(jù)庫字符集

字符集其實(shí)就是一套文字符號及編碼,對應(yīng)的文字及編碼,可以將人類可以識別的內(nèi)容與計算機(jī)可以識別的信息進(jìn)行互相轉(zhuǎn)換。

一個字母表使用了四個字母:A、B、a、b。每個字母賦予一個數(shù)值:A=0,B=1,a=2,b=3。字母A是一個符號,數(shù)字0是A的編碼,這四個字母和它們的編碼組合在一起就可以稱為一個字符集。

MySQL數(shù)據(jù)庫的字符集不僅包括字符集(CHARACTER),還包括校對規(guī)則(COLLATION)。其中,校對規(guī)則的作用是定義比較字符串的方式。

假設(shè)比較兩個字符串的值:A和B。最簡單的方法是查找編碼:A為0,B為1。因?yàn)?小于1,所以可以說A小于B。所做的僅僅是在字符集上應(yīng)用了一個校對規(guī)則。校對規(guī)則是一套規(guī)則,作用是對編碼進(jìn)行比較。

1.3.常用字符集介紹與選擇建議

1.3.1.常用字符集介紹

在操作系統(tǒng)以及各類軟件中都有字符集,MySQL也不例外。

常用字符集知識:

常用字符集最大長度說明
GB23122字節(jié)早期制定的標(biāo)準(zhǔn),不推薦使用
GB180304字節(jié)受一些系統(tǒng)支持,數(shù)據(jù)庫支持的不多,不推薦使用
GBK2字節(jié)不是國際標(biāo)準(zhǔn),對中文環(huán)境支持的很好,不推薦使用
UTF83字節(jié)中英文混合的環(huán)境,建議使用此字符集,目前使用的比較多,互聯(lián)網(wǎng)場景的Linux/UNIX及MySQL都支持UTF8,重點(diǎn)推薦
latin11字節(jié)MySQL系統(tǒng)的默認(rèn)字符集,不推薦使用
utf8mb44字節(jié)utf8mb4字符集主要從5.5開始被支持,兼容UTF8,且比UTF8能表示更多的字符,正在成為未來趨勢字符集,重點(diǎn)推薦

1.3.2.MySQL如何選擇合適的字符集

1、如果存儲的是各種各樣的語言文字,則可以選擇UTF8,這是目前國內(nèi)應(yīng)用最為廣泛的字符集,沒有之一。
2、如果只需要支持中文,并且數(shù)據(jù)量很大,此外,還包含了大量的運(yùn)算,則可以選擇GBK,理論上其可以獲得更高的性能,但不推薦使用。
3、對于新型的互聯(lián)網(wǎng)以及移動互聯(lián)網(wǎng)的混合業(yè)務(wù),推薦使用utf8mb4字符集替代UTF8字符集??傊?,如果沒有極特別的需求,請選擇UTF8或utf8mb4作為數(shù)據(jù)庫的字符集。
4、如果使用開源程序,則可以根據(jù)上述說明進(jìn)行選擇,如果是公司開發(fā)人員自己開發(fā)產(chǎn)品,那么選擇權(quán)就在開發(fā)人員手里,DBA只能提供建議。

1.3.3.查看MySQL數(shù)據(jù)庫字符集和校對規(guī)則

查看當(dāng)前MySQL系統(tǒng)支持的字符集

MySQL數(shù)據(jù)庫支持的字符集有很多種,通過命令可以查看當(dāng)前MySQL支持的字符集:

show character set;

2.MySQL數(shù)據(jù)庫字符集配置

設(shè)置MySQL的字符集需要考慮到很多個層次,將這些需要考慮的層次大概分為7個級別。

1、操作系統(tǒng)級別。
2、操作系統(tǒng)客戶端級別(SSH)。
3、MySQL實(shí)例級別。
4、數(shù)據(jù)庫中的庫級別。
5、表級別(含字段級別)。
6、MySQL客戶端級別(連接及返回結(jié)果)。
7、程序代碼級別。

2.1.Linux系統(tǒng)服務(wù)端字符集設(shè)置

很多人在使用MySQL時經(jīng)常會被中文亂碼所困擾,其中Linux系統(tǒng)和連接Linux系統(tǒng)客戶端的字符集設(shè)置可能就是問題之一,對此,要盡量將系統(tǒng)的字符集和系統(tǒng)中軟件的字符集進(jìn)行統(tǒng)一,設(shè)置和生效的方法:

vim /etc/sysconfig/il8n  #配置到配置文件里可以永久生效。
LANG="zh_CN.UTF-8"  #LANG為系統(tǒng)字符集環(huán)境變量,設(shè)置為中文UTF8.
SYSFONT="latarcyrheb-sun16"

source /etc/sysconfig/il8n  #使得修改生效。
echo $LANG  #檢查生效情況。

在Linux服務(wù)器里使用MySQL登錄到數(shù)據(jù)庫,要注意系統(tǒng)字符集的使用。

2.2.Linux系統(tǒng)客戶端字符集設(shè)置

常見的連接Linux的客戶端為SecureCRT、XShell。

SecureCRT:會話選項-終端-外觀-字符編碼
XShell:地球-下拉箭頭

2.3.MySQL服務(wù)端數(shù)據(jù)庫字符集設(shè)置

設(shè)置服務(wù)器的字符集有很多種方法,常用的三種方法:

方法一:在編譯安裝MySQL的時候指定服務(wù)器端字符集。

cmake .
-DDEFAULT_CHARSET=utf8 -DDEFAULT_COLLATION=utf8_general_ci -DWITH_EXTRA_CHARSETS=all

方法二:編譯時沒指定字符集,或者指定了不合適的字符集,也還可以在安裝后修改配置文件。

[mysqld]
character-set-server=utf8

方法三:可以在啟動數(shù)據(jù)庫時,增加選項指定的字符集。

mysqld --character-set-server=utf8

2.4.MySQL數(shù)據(jù)庫中的庫的字符集設(shè)置

在MySQL中,庫的字符集設(shè)置一般是在建庫的時候指定的,如果在建庫的時候未指定,則庫的字符集與MySQL數(shù)據(jù)庫實(shí)例的字符集一致??赏ㄟ^命令查看當(dāng)前實(shí)例的字符集:

show variables like 'character_set_database%';
show variables like 'collation_database%';

創(chuàng)建數(shù)據(jù)庫test,并查看建庫的字符集:

create database test;
show create database test\G

在編譯MySQL時,若指定了正確的字符集或者修改配置文件調(diào)整過的服務(wù)器的字符集,那么,在以后建庫的時候就可以直接執(zhí)行簡化的命令“create database test;”。

也可以在建庫的時候指定字符集和校對規(guī)則來建庫;

create database oldboy default character set utf8 default collate = utf8_general_ci;

"CHARACTER SET UTF8"即為數(shù)據(jù)庫字符集,而“utf8_general_ci”則為校對規(guī)則。

2.5.MySQL數(shù)據(jù)庫表的字符集設(shè)置

建表的字符集與庫的字符集應(yīng)一致,設(shè)置表字符集的命令:

use test;
create table test(id int(4));
show create table test\G;

2.6.MySQL數(shù)據(jù)庫客戶端字符集設(shè)置

對MySQL數(shù)據(jù)庫客戶端字符集進(jìn)行設(shè)置,對于防止MySQL更新時,出現(xiàn)中文亂碼有極大的影響,設(shè)置方法也有幾種。

方法一:臨時生效單條命令法。

set names utf8;

“set names utf8”也可以用三個命令來替代。
set character_set_client = utf8;
set character_set_results = utf8;
set character_set_connection = utf8;

方法二:登錄數(shù)據(jù)庫時指定字符集。

mysql --default-character-set=utf8;

方法三:通過修改my.cnf實(shí)現(xiàn)修改MySQL客戶端的字符集,配置方法。

[client]
default-character-set=utf8

人工登錄數(shù)據(jù)庫執(zhí)行“set names UTF8”,以及使用MySQL命令指定字符集登錄操作,或者更改my.cnf配置文件客戶端模塊的參數(shù),來實(shí)現(xiàn)更改客戶端字符集,都是改變了MySQL客戶端的client、connection、results3個參數(shù)的字符集。

3.防止數(shù)據(jù)庫的中文顯示亂碼

管理員在配置MySQL數(shù)據(jù)庫字符集時,需要盡可能地確保7大項字符集統(tǒng)一,對于管理員來說,查看數(shù)據(jù)庫字符集的基本方法:

show variables like 'character_set%';
character_set_client  #客戶端字符集
character_set_connection  #客戶端連接字符集
character_set_database  #數(shù)據(jù)庫字符集,配置文件時指定或建庫建表時指定
character_set_filesystem  #文件系統(tǒng)字符集
character_set_results  #客戶端返回結(jié)果字符集
character_set_server  #服務(wù)器字符集,配置文件時指定或建庫建表時指定
character_set_system  #系統(tǒng)字符集

更改Linux系統(tǒng)字符集變量之后,可以查看MySQL中字符集的變化。

徹底防止MySQL數(shù)據(jù)庫內(nèi)的數(shù)據(jù)中文亂碼方法

字符集的不一致是數(shù)據(jù)庫亂碼的罪魁禍?zhǔn)?,要想避免MySQL數(shù)據(jù)庫內(nèi)的數(shù)據(jù)中文亂碼方法,就要遵循7大項字符集設(shè)置規(guī)則,即Linux系統(tǒng)服務(wù)端與Linux系統(tǒng)客戶端字符集、MySQL服務(wù)端數(shù)據(jù)庫實(shí)例與MySQL數(shù)據(jù)庫客戶端字符集、MySQL數(shù)據(jù)庫中的庫和表的字符集、程序代碼的字符集要一致。如果是利用文件還原數(shù)據(jù),還要注意文件的編碼問題。

4.更改MySQL數(shù)據(jù)庫庫表的字符集

4.1.更改庫的字符集

管理員可以使用alter命令對數(shù)據(jù)庫的字符集進(jìn)行更改:

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命令對數(shù)據(jù)庫的表的字符集進(jìn)行更改:

use test;
show create table t1\G
alter table t1 character set latin1;
show create table t1\G

4.3.生產(chǎn)環(huán)境更改數(shù)據(jù)庫(含數(shù)據(jù))字符集的方法

對于已經(jīng)包含了數(shù)據(jù)的庫表,若要對字符集進(jìn)行調(diào)整,就需要將數(shù)據(jù)先導(dǎo)出,然后更改數(shù)據(jù)庫環(huán)境,更改建庫和表的字符集之后,重新導(dǎo)入數(shù)據(jù),這樣才能實(shí)現(xiàn)相應(yīng)的調(diào)整。

1、確保數(shù)據(jù)庫不要更新,然后導(dǎo)出所有數(shù)據(jù)為SQL的文件。
2、針對導(dǎo)出的數(shù)據(jù)進(jìn)行字符集替換(替換表和庫),例如把GBK改為UTF8。
3、修改my.cnf配置文件,更改MySQL客戶端及服務(wù)端的字符集,重啟生效。
4、導(dǎo)入更改過新字符集的庫表的數(shù)據(jù),包括表結(jié)構(gòu)語句,然后提供服務(wù)。
5、將操作系統(tǒng)、SSH客戶端,以及程序更改為對應(yīng)的新字符集。 

更改字符集時,要將小的字符集集合更改為大的字符集集合,不然可能會丟失數(shù)據(jù)。

    本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點(diǎn)擊一鍵舉報。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多