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

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

UTF8MB4常用的排序規(guī)則:utf8mb4_unicode_ci、utf8mb4_general_ci、utf8mb4_bin,選用哪種方式呢?先來分析一下:
1、準確性:
(1)utf8mb4_unicode_ci 是基于標準的Unicode來排序和比較,能夠在各種語言之間精確排序,不區(qū)分大小寫
(2)utf8mb4_general_ci 沒有實現(xiàn)Unicode排序規(guī)則,在遇到某些特殊語言或者字符集,排序結(jié)果可能不一致,不區(qū)分大小寫
2、性能:
?。?)utf8mb4_general_ci 在比較和排序的時候更快
?。?)utf8mb4_unicode_ci 在特殊情況下,Unicode排序規(guī)則為了能夠處理特殊字符的情況,實現(xiàn)了略微復(fù)雜的排序算法。相比選擇哪一種collation,使用者更應(yīng)該關(guān)心字符集與排序規(guī)則在db里需要統(tǒng)一。
?。?)utf8mb4_bin:將字符串每個字符用二進制數(shù)據(jù)編譯存儲,區(qū)分大小寫,而且可以存二進制的內(nèi)容。
總而言之,utf8mb4_general_ci 和utf8mb4_unicode_ci 是我們最常使用的排序規(guī)則。utf8mb4_unicode_ci 校對速度快,但準確度稍差。utf8_unicode_ci準確度高,但校對速度稍慢,兩者都不區(qū)分大小寫。這兩個選哪個視自己情況而定,還是那句話盡可能保持db中的字符集和排序規(guī)則的統(tǒng)計。
四、Mysql查詢字符集和排序規(guī)則常用的命令
| 功能 | 命令 |
|---|---|
| 查看數(shù)據(jù)庫字符集 | show create database 數(shù)據(jù)庫名 |
| 查看數(shù)據(jù)表全部字段排序規(guī)則 | show full columns from 表 |
總結(jié)
到此這篇關(guān)于MySQL建立數(shù)據(jù)庫時字符集與排序規(guī)則的選擇的文章就介紹到這了,更多相關(guān)MySQL字符集與排序規(guī)則內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Mysql中文亂碼以及導(dǎo)出為sql語句和Excel問題解決方法[圖文]
這幾天基于Heritrix寫了一個爬蟲,用到mysql,在導(dǎo)入導(dǎo)出數(shù)據(jù)時,遇到一些亂碼問題,好不容易解決了,記錄一下,以備查看2013-04-04
mysql報錯:Deadlock found when trying to get lock; try restarti
這篇文章主要給大家介紹了關(guān)于mysql出現(xiàn)報錯:Deadlock found when trying to get lock; try restarting transaction的解決方法,文中通過示例代碼介紹的非常詳細,對大家具有一定的參考學(xué)習(xí)價值,需要的朋友們下面來一起看看吧。2017-07-07
Mysql匿名登錄無法創(chuàng)建數(shù)據(jù)庫問題解決方案
這篇文章主要介紹了Mysql匿名登錄無法創(chuàng)建數(shù)據(jù)庫問題解決方案,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下2020-12-12
windows下mysql 8.0.12安裝步驟及基本使用教程
這篇文章主要為大家詳細介紹了windows下mysql 8.0.12安裝步驟及基本使用教程,具有一定的參考價值,感興趣的小伙伴們可以參考一下2019-08-08

