MySQL字符集是什么?字符集的相關(guān)介紹
發(fā)表時(shí)間:2023-07-10 來(lái)源:明輝站整理相關(guān)軟件相關(guān)文章人氣:
[摘要]本文給大家?guī)?lái)MySQL字符集是什么?字符集的相關(guān)介紹。有一定的參考價(jià)值,有需要的朋友可以參考一下,希望對(duì)你們有所幫助。字符集介紹gbk/gb2312gbk/gb2312采用雙字節(jié)字符集,不論中、英...
本文給大家?guī)?lái)MySQL字符集是什么?字符集的相關(guān)介紹。有一定的參考價(jià)值,有需要的朋友可以參考一下,希望對(duì)你們有所幫助。
字符集介紹
gbk/gb2312
gbk/gb2312
采用雙字節(jié)字符集,不論中、英文字符均使用雙字符來(lái)表示,為了區(qū)分中文,將其最高位都設(shè)定成1
gb2312是gbk的子集,gbk是gb18030的子集,gb2312僅能存儲(chǔ)簡(jiǎn)體中文字符
gbk包括中日韓字符的大字符集
通常使用gbk字符集足夠
國(guó)際通用性比utf8差,不過(guò)utf8占用的數(shù)據(jù)庫(kù)比gbk大(utf8是三字節(jié)字符集)
utf8/utf8mb4
UTF全稱(Unicode Transformation Format),是Unicode的一種存儲(chǔ)方式,可變長(zhǎng)度字符編碼,又稱萬(wàn)國(guó)碼;
數(shù)據(jù)庫(kù)字符集盡量使用utf8(包括 connect、result、及最終html頁(yè)面都必須要求一致為utf8);
UTF8使用可變長(zhǎng)度字節(jié)來(lái)存儲(chǔ) Unicode字符,例如 ASCII字母繼續(xù)使用1個(gè)字節(jié)存儲(chǔ),重音文字、希臘字母、或西里爾字母等使用2個(gè)字節(jié)來(lái)存儲(chǔ),而常用的漢字就要用3個(gè)字節(jié);也就是一個(gè)英文字符等于一個(gè)字節(jié),一個(gè)中文(含繁體)等于三個(gè)字節(jié)。
utf8mb4一個(gè)字符最多能存4字節(jié),所以能支持更多的字符集;項(xiàng)目中常用utf8mb4存放emoji表情;
latin1是8bit (1 bytes)字符集,但不能覆蓋亞洲、非洲語(yǔ)言;
unidoce是latin1的擴(kuò)展,增加了亞洲、非洲常規(guī)語(yǔ)言支持,但仍不支持全部語(yǔ)言,且ASCII用unidoce來(lái)表示效率不高(小字符集轉(zhuǎn)換成大字符集,往往便隨的就是字符的丟失);
utf8是unicode的擴(kuò)展;
gbk、gb2312等字符集與utf8之間都必須通過(guò)Unicode編碼才能相互轉(zhuǎn)換。
字符集使用建議
1、非?隙ㄖ挥兄形慕K端用戶時(shí),可選擇gbk / gb2312
2、為了方便數(shù)據(jù)遷移、以及多種終端展示,最好是utf8
3、字符無(wú)需區(qū)分大小寫時(shí),采用默認(rèn)的xx_ci校驗(yàn)集可以,否則選擇xx_bin校驗(yàn)集(生產(chǎn)環(huán)境中,盡量不要修改校驗(yàn)集)
4、默認(rèn)字符集是latin1,該字符集存放漢字是分開存放,以至于檢索結(jié)果時(shí)不夠精確,好處就是節(jié)省空間,不推薦使用
MySQL字符集范圍
服務(wù)器層(server) > 數(shù)據(jù)庫(kù)成(database) > 數(shù)據(jù)表(table) > 字段(column) > 連接(connection) 結(jié)果集(result)
MySQL字符集優(yōu)先級(jí)
連接(connection) 結(jié)果集(result) > 字段(column) > 數(shù)據(jù)表(table) > 數(shù)據(jù)庫(kù)成(database) > 服務(wù)器層(server)
char類型
char(N):N代表的是字符個(gè)數(shù)(也叫字符長(zhǎng)度)、而非bytes
char(N):是固定長(zhǎng)存儲(chǔ),占用定長(zhǎng)的存儲(chǔ)空間,不足的部分用空格填充;MySQL處理char(N)類型時(shí),需要將空格strip掉后return。
存儲(chǔ)空間:char(N)類型的存儲(chǔ)空間和字符集有關(guān)系,結(jié)合剛才字符集的知識(shí)點(diǎn),一個(gè)中文在utf8字符集中占用3個(gè)bytes、gbk占用2個(gè)bytes、數(shù)字和字符統(tǒng)一用一個(gè)字符表示。
存儲(chǔ)機(jī)制:在不夠N長(zhǎng)度時(shí),MySQL在存儲(chǔ)數(shù)據(jù)時(shí),需要用填充特殊的空格,而非十六進(jìn)制的20
思考:
char(30),在不同的字符集中最多能存放多少個(gè)字母、漢字,以及占用空間情況
gbk: 可以存放30個(gè)字節(jié) 占用的空間30*2utf8:可以存放30個(gè)字節(jié) 占用的空間30*3
varcahr類型
varchar(N):N代表的是字符個(gè)數(shù)(也叫字符長(zhǎng)度)、而非bytes
varchar(N):是變長(zhǎng)存儲(chǔ),僅使用必要的存儲(chǔ)空間.
存儲(chǔ)空間:varchar(N)類型的存儲(chǔ)空間和字符集有關(guān)系,結(jié)合剛才字符集的知識(shí)點(diǎn),一個(gè)中文在utf8字符集中占用3個(gè)bytes、gbk統(tǒng)一占用2個(gè)bytes、數(shù)字和字符一個(gè)字符表示。
存儲(chǔ)機(jī)制:varchar(N)字段存儲(chǔ)實(shí)際是從第二個(gè)字節(jié)開始存儲(chǔ),然后用1到2個(gè)字節(jié)表示實(shí)際長(zhǎng)度,剩下的才是可以存儲(chǔ)數(shù)據(jù)的范圍,因此最大可用存儲(chǔ)范圍是65535-3=65532字節(jié);第一個(gè)字節(jié)標(biāo)識(shí)是否為空.(長(zhǎng)度小于255字節(jié),使用一個(gè)字節(jié)來(lái)表示長(zhǎng)度;大于255字節(jié)使用兩個(gè)字節(jié)來(lái)表示長(zhǎng)度)
修改數(shù)據(jù)庫(kù)實(shí)例字符集
臨時(shí)生效
mysql> set character_set = 'gbk';
mysql> set character_set_client = 'gbk';
全局生效
mysql> set global character_set_client = 'gbk';
Query OK, 0 rows affected (0.00 sec)
永久生效
vim /etc/my.cnf
character-set-server=utf8
總結(jié):以上就是本篇文的全部?jī)?nèi)容,希望能對(duì)大家的學(xué)習(xí)有所幫助。更多相關(guān)教程請(qǐng)?jiān)L問(wèn)mysql數(shù)據(jù)庫(kù)圖文教程 ,MySQL視頻教程,bootstrap視頻教程!
以上就是MySQL字符集是什么?字符集的相關(guān)介紹的詳細(xì)內(nèi)容,更多請(qǐng)關(guān)注php中文網(wǎng)其它相關(guān)文章!
學(xué)習(xí)教程快速掌握從入門到精通的SQL知識(shí)。