MySQL建立數(shù)據(jù)庫(kù)時(shí)字符集與排序規(guī)則的選擇詳解
前言
在MySQL中,字符集和排序規(guī)則是區(qū)分開來(lái)的,你可以單獨(dú)設(shè)置字符集和排序規(guī)則。
MySQL字符集和排序規(guī)則有關(guān)聯(lián)而且還不是必選項(xiàng),如果字符集和排序規(guī)則都不填寫,Mysql會(huì)做默認(rèn)處理;或者設(shè)置其一,比如設(shè)置字符集,會(huì)默認(rèn)設(shè)置了與字符集相應(yīng)的排序規(guī)則。
我們建立數(shù)據(jù)庫(kù)是總要涉及到字符集和排序規(guī)則的選擇問題?怎么選擇呢,有什么區(qū)別呢?
一、字符集?
先說字符,字符(Character)是各種文字和符號(hào)的總稱,包括各國(guó)家文字、標(biāo)點(diǎn)符號(hào)、圖形符號(hào)、數(shù)字等。
字符集(Character set)是多個(gè)字符的集合,常見字符集名稱:ASCII字符集、GB2312字符集、BIG5字符集、 GB18030字符集、Unicode字符集等。計(jì)算機(jī)要準(zhǔn)確的處理各種字符集文字,就需要進(jìn)行字符編碼,以便計(jì)算機(jī)能夠識(shí)別和存儲(chǔ)各種文字。
字符編碼(Character encoding)也稱字集碼,是把字符集中的字符通過編碼成為指定集合中某一對(duì)象(例如:比特模式、自然數(shù)序列、8位組或者電脈沖),以便文本在計(jì)算機(jī)中存儲(chǔ)和通過通信網(wǎng)絡(luò)的傳遞。常見的例子包括將拉丁字母表編碼成摩斯電碼和ASCII。其中,ASCII將字母、數(shù)字和其它符號(hào)編號(hào),并用7比特的二進(jìn)制來(lái)表示這個(gè)整數(shù)。通常會(huì)額外使用一個(gè)擴(kuò)充的比特,以便于以1個(gè)字節(jié)的方式存儲(chǔ)。
二、Mysql中的字符集

在MySQL中,常用的幾個(gè)字符集有UTF8、UTF8MB4、UTF16、UTF32等,那么Unicode與UTF8、UTF8MB4、UTF16、UTF32是什么關(guān)系?我們新建數(shù)據(jù)庫(kù)時(shí)選擇哪種字符集呢?
1.Unicode與UTF8、UTF8MB4、UTF16、UTF32關(guān)系
Unicode(統(tǒng)一碼、萬(wàn)國(guó)碼、單一碼)是計(jì)算機(jī)科學(xué)領(lǐng)域里的一項(xiàng)業(yè)界標(biāo)準(zhǔn),包括字符集、編碼方案等。Unicode 是為了解決傳統(tǒng)的字符編碼方案的局限而產(chǎn)生的,它為每種語(yǔ)言中的每個(gè)字符設(shè)定了統(tǒng)一并且唯一的二進(jìn)制編碼,以滿足跨語(yǔ)言、跨平臺(tái)進(jìn)行文本轉(zhuǎn)換、處理的要求。UTF8、UTF16、UTF32是Unicode碼一種實(shí)現(xiàn)形式,都是屬于Unicode編碼。
2.Mysql新建數(shù)據(jù)庫(kù)時(shí)選擇哪種字符集呢?
UTF8和UTF8MB4是常用的兩種字符集,至于這兩個(gè)選用哪個(gè)要根據(jù)自己業(yè)務(wù)情況而定。UTF8MB4兼容UTF8,比UTF8能表示更多的字符,Unicode編碼區(qū)從編碼區(qū)1-126屬于UTF8區(qū),當(dāng)然UTF8MB4也兼容這個(gè)區(qū),126行以下就是UTF8MB4擴(kuò)充區(qū),所以你要根據(jù)自己的業(yè)務(wù)進(jìn)行選擇,一般情況下UTF8就滿足需求,當(dāng)然如果考慮到以后擴(kuò)展,比如考慮到以后存儲(chǔ)emoji,就選擇UTF8MB4,否則只是浪費(fèi)空間。我建議還是選擇UTF8MB4,畢竟對(duì)于大部分公司而言空間不是什么大問題。
三、Mysql排序規(guī)則

UTF8MB4常用的排序規(guī)則:utf8mb4_unicode_ci、utf8mb4_general_ci、utf8mb4_bin,選用哪種方式呢?先來(lái)分析一下:
1、準(zhǔn)確性:
(1)utf8mb4_unicode_ci 是基于標(biāo)準(zhǔn)的Unicode來(lái)排序和比較,能夠在各種語(yǔ)言之間精確排序,不區(qū)分大小寫
(2)utf8mb4_general_ci 沒有實(shí)現(xiàn)Unicode排序規(guī)則,在遇到某些特殊語(yǔ)言或者字符集,排序結(jié)果可能不一致,不區(qū)分大小寫
2、性能:
?。?)utf8mb4_general_ci 在比較和排序的時(shí)候更快
?。?)utf8mb4_unicode_ci 在特殊情況下,Unicode排序規(guī)則為了能夠處理特殊字符的情況,實(shí)現(xiàn)了略微復(fù)雜的排序算法。相比選擇哪一種collation,使用者更應(yīng)該關(guān)心字符集與排序規(guī)則在db里需要統(tǒng)一。
?。?)utf8mb4_bin:將字符串每個(gè)字符用二進(jìn)制數(shù)據(jù)編譯存儲(chǔ),區(qū)分大小寫,而且可以存二進(jìn)制的內(nèi)容。
總而言之,utf8mb4_general_ci 和utf8mb4_unicode_ci 是我們最常使用的排序規(guī)則。utf8mb4_unicode_ci 校對(duì)速度快,但準(zhǔn)確度稍差。utf8_unicode_ci準(zhǔn)確度高,但校對(duì)速度稍慢,兩者都不區(qū)分大小寫。這兩個(gè)選哪個(gè)視自己情況而定,還是那句話盡可能保持db中的字符集和排序規(guī)則的統(tǒng)計(jì)。
四、Mysql查詢字符集和排序規(guī)則常用的命令
| 功能 | 命令 |
|---|---|
| 查看數(shù)據(jù)庫(kù)字符集 | show create database 數(shù)據(jù)庫(kù)名 |
| 查看數(shù)據(jù)表全部字段排序規(guī)則 | show full columns from 表 |
總結(jié)
到此這篇關(guān)于MySQL建立數(shù)據(jù)庫(kù)時(shí)字符集與排序規(guī)則的選擇的文章就介紹到這了,更多相關(guān)MySQL字符集與排序規(guī)則內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
mysql的bigint?和?bigint(20)?主鍵自增的區(qū)別解析
bigint和bigint(20)在MySQL中作為主鍵自增時(shí),功能完全相同,本文介紹mysql的bigint和bigint(20)主鍵自增的區(qū)別,感興趣的朋友跟隨小編一起看看吧2026-01-01
MySQL報(bào)錯(cuò)Expression #1 of SELECT list 
這篇文章主要介紹了MySQL報(bào)錯(cuò)Expression #1 of SELECT list is not in GROUP BY clause and contains nonaggre問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-09-09
ubuntu安裝mysql數(shù)據(jù)庫(kù)方法
ubuntu基于linux的免費(fèi)開源桌面PC操作系統(tǒng),十分契合英特爾的超極本定位,支持x86、64位和ppc架構(gòu)。這篇文章給大家介紹ubuntu安裝mysql數(shù)據(jù)庫(kù)方法,非常不錯(cuò),需要的朋友參考下吧2019-08-08
CentOS Mysql數(shù)據(jù)庫(kù)如何實(shí)現(xiàn)定時(shí)備份
這篇文章主要介紹了CentOS Mysql數(shù)據(jù)庫(kù)如何實(shí)現(xiàn)定時(shí)備份,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-06-06
mysql建表常用sql語(yǔ)句個(gè)人經(jīng)驗(yàn)分享
熟悉一些常用的建表語(yǔ)句可以提升你建表的速度效率,本文整理了一些,個(gè)人感覺還不錯(cuò),希望對(duì)大家有所幫助2014-01-01
MySQL中的基本查詢語(yǔ)句學(xué)習(xí)筆記
這篇文章主要介紹了MySQL中的基本查詢語(yǔ)句學(xué)習(xí)筆記,包括使用limit限制查詢結(jié)果條數(shù)和合并查詢結(jié)果的方法,需要的朋友可以參考下2016-03-03

