一、概述
在MySQL中,字符集和排序規則是區分開來的,你可以單獨設置字符集和排序規則。MySQL字符集和排序規則有關聯而且還不是必選項,如果字符集和排序規則都不填寫,Mysql會做默認處理;或者設置其一,比如設置字符集,會默認設置了與字符集相應的排序規則,我們建立數據庫是總要涉及到字符集和排序規則的選擇問題?怎么選擇呢,有什么區別呢?
二、字符集
1、字符
字符(Character)是各種文字和符號的總稱,包括各國家文字、標點符號、圖形符號、數字等。
2、字符集
字符集(Character set)是多個字符的集合,常見字符集名稱:ASCII字符集、GB2312字符集、BIG5字符集、 GB18030字符集、Unicode字符集等。計算機要准確的處理各種字符集文字,就需要進行字符編碼,以便計算機能夠識別和存儲各種文字。
3、字符編碼
字符編碼(Character encoding)也稱字集碼,是把字符集中的字符通過編碼成為指定集合中某一對象(例如:比特模式、自然數序列、8位組或者電脈沖),以便文本在計算機中存儲和通過通信網絡的傳遞。常見的例子包括將拉丁字母表編碼成摩斯電碼和ASCII。其中,ASCII將字母、數字和其它符號編號,並用7比特的二進制來表示這個整數。通常會額外使用一個擴充的比特,以便於以1個字節的方式存儲。
三、Mysql中的字符集
在MySQL中,常用的幾個字符集有UTF8、UTF8MB4、UTF16、UTF32等,那么Unicode與UTF8、UTF8MB4、UTF16、UTF32是什么關系?我們新建數據庫時選擇哪種字符集呢?
1、Unicode與UTF8、UTF8MB4、UTF16、UTF32關系
Unicode(統一碼、萬國碼、單一碼)是計算機科學領域里的一項業界標准,包括字符集、編碼方案等。Unicode 是為了解決傳統的字符編碼方案的局限而產生的,它為每種語言中的每個字符設定了統一並且唯一的二進制編碼,以滿足跨語言、跨平台進行文本轉換、處理的要求。UTF8、UTF16、UTF32是Unicode碼一種實現形式,都是屬於Unicode編碼。
2、Mysql新建數據庫時選擇哪種字符集呢?
UTF8和UTF8MB4是常用的兩種字符集,至於這兩個選用哪個要根據自己業務情況而定。UTF8MB4兼容UTF8,比UTF8能表示更多的字符,Unicode編碼區從編碼區1-126屬於UTF8區,當然UTF8MB4也兼容這個區,126行以下就是UTF8MB4擴充區,所以你要根據自己的業務進行選擇,一般情況下UTF8就滿足需求,當然如果考慮到以后擴展,比如考慮到以后存儲emoji,就選擇UTF8MB4,否則只是浪費空間。我建議還是選擇UTF8MB4,畢竟對於大部分公司而言空間不是什么大問題。
四、Mysql排序規則
UTF8MB4常用的排序規則:utf8mb4_unicode_ci、utf8mb4_general_ci、utf8mb4_bin,選用哪種方式呢?先來分析一下:
1、准確性
- utf8mb4_unicode_ci 是基於標准的Unicode來排序和比較,能夠在各種語言之間精確排序,不區分大小寫
- utf8mb4_general_ci 沒有實現Unicode排序規則,在遇到某些特殊語言或者字符集,排序結果可能不一致,不區分大小寫
2、性能
- utf8mb4_general_ci 在比較和排序的時候更快
- utf8mb4_unicode_ci 在特殊情況下,Unicode排序規則為了能夠處理特殊字符的情況,實現了略微復雜的排序算法。相比選擇哪一種collation,使用者更應該關心字符集與排序規則在db里需要統一。
- utf8mb4_bin:將字符串每個字符用二進制數據編譯存儲,區分大小寫,而且可以存二進制的內容。
五、Mysql查詢字符集和排序規則常用的命令
序號 | 功能 | 命令 |
1 | 查看數據庫字符集 | show create database 數據庫名 |
2 | 查看數據表全部字段排序規則 | show full columns from 表名 |