mysql數據庫字符集utf8mb4和排序規則utf8mb4_bin

一、存儲字符集 utf8 和 utf8mb4
1、utf8
utf8 是 Mysql 中的一種字符集,只支持最長三個字節的 UTF-8 字符,也就是 Unicode 中的基本多文本平面
2、utf8mb4
要在 Mysql 中保存 4 字節長度的 UTF-8 字符,需要使用 utf8mb4 字符集,但只有 5.5.3 版本以後的才支持。我覺得,爲了獲取更好的兼容性,應該總是使用 utf8mb4 而非 utf8。對於 CHAR 類型數據,utf8mb4 會多消耗一些空間,根據 Mysql 官方建議,使用 VARCHAR 替代 CHAR
總結:UTF-8是使用1~4個字節,一種變長的編碼格式,字符編碼。mb4即 most bytes 4,使用4個字節來表示完整的UTF-8。

二、排序字符集
utf8mb4_unicode_ci 和 utf8mb4_general_ci、utf8mb4_bin、utf8mb4_0900_ai_ci
MySQL常用排序規則utf8mb4_general_ci、utf8mb4_unicode_ci、utf8mb4_bin_ci

ci 是 case insensitive,不區分大小寫,即 "大小寫不敏感", a 和 A 會在字符判斷中會被當做一樣的。
bin 是二進制, a 和 A 會別區別對待(例如運行SELECT * FROM table WHERE txt = 'a', 那麼在utf8mb4_bin中就找不到 txt = 'A' 的那一行, 而 utf8mb4_general_ci 則可以)

1、utf8mb4_unicode_ci:
是基於標準的Unicode來排序和比較,能夠在各種語言之間精確排序,Unicode排序規則爲了能夠處理特殊字符的情況,實現了略微複雜的排序算法

2、utf8mb4_general_ci:
是一個遺留的 校對規則,不支持擴展,它僅能夠在字符之間進行逐個比較,不區分大小寫, utf8mb4_general_cs 區分大小寫。
utf8_general_ci校對規則進行的比較速度很快,但是與使用 utf8mb4_unicode_ci的校對規則相比,比較正確性較差。

3、utf8mb4_bin:
將字符串每個字符用二進制數據編譯存儲,區分大小寫,而且可以存二進制的內容。

4、utf8mb4_0900_ai_ci:
MySQL 8.0 默認的是 utf8mb4_0900_ai_ci,屬於 utf8mb4_unicode_ci 中的一種,具體含義如下
uft8mb4 表示用 UTF-8 編碼方案,每個字符最多佔 4 個字節
0900 指的是 Unicode 校對算法版本(Unicode 歸類算法是用於比較符合 Unicode 標準要求的兩個 Unicode 字符串的方法)
ai 指的是口音不敏感。也就是說,排序時 e,è,é,ê 和 ë 之間沒有區別
ci 表示不區分大小寫。也就是說,排序時 p 和 P 之間沒有區別

utf8mb4 已成爲默認字符集,在 MySQL 8.0.1 及更高版本中將 utf8mb4_0900_ai_ci 作爲默認排序規則。
以前,utf8mb4_general_ci 是默認排序規則。由於 utf8mb4_0900_ai_ci 排序規則現在是默認排序規則,因此默認情況下新表格可以存儲基本多語言平面之外的字符。現在可以默認存儲表情符號。如果需要重音靈敏度和區分大小寫,則可以使用 utf8mb4_0900_as_cs 代替。

utf8mb4_unicode_ci 和 utf8mb4_general_ci 的區別
1、準確性
utf8mb4_unicode_ci 是基於標準的 Unicode 來排序和比較,能夠在各種語言之間精確排序。
utf8mb4_general_ci 沒有實現 Unicode 排序規則,在遇到某些特殊語言或者字符集,排序結果可能不一致。
但是絕大多數情況下,這些特殊字符的順序並不需要那麼精確。
2、性能
utf8mb4_general_ci 在比較和排序的時候更快。
utf8mb4_unicode_ci 在特殊情況下,Unicode 排序規則爲了能夠處理特殊字符的情況,實現了略微複雜的排序算法。
但是在絕大多數情況下,不會發生此類複雜比較。相比選擇哪一種 collation,使用者更應該關心字符集與排序規則在 db 裏需要統一。

對於一種語言僅當使用 utf8mb4_unicode_ci 排序做的不好時,才執行與具體語言相關的utf8mb4字符集校對規則。例如,對於德語和法語,utf8mb4_unicode_ci工作的很好,因此不再需要爲這兩種語言創建特殊的utf8mb4校對規則。
utf8mb4_general_ci 也適用德語、法語或者俄語,但會有不準。如果你的應用能夠接受這些,那麼應該使用 utf8mb4_general_ci,因爲它速度快。
否則,使用utf8mb4_unicode_ci,因爲它比較準確。

雖然推薦用 utf8mb4_unicode_ci,但是用 utf8mb4_general_ci 也沒啥問題。
因爲utf8mb4_unicode_ci比較準確,utf8mb4_general_ci速度比較快。通常情況下,新建數據庫 和 建 varchar字符集類型字段 時一般選用 utf8mb4_general_ci 就可以。

版權聲明:本文爲CSDN博主「MinggeQingchun」的原創文章,遵循CC 4.0 BY-SA版權協議,轉載請附上原文出處鏈接及本聲明。
原文鏈接:https://blog.csdn.net/MinggeQingchun/article/details/129858039

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章