MySQL中utf8mb4排序規(guī)則示例
在MySQL中常見的utf8mb4排序規(guī)則有:
utf8mb4_0900_ai_ci utf8mb4_unicode_ci utf8mb4_general_ci當(dāng)設(shè)置表的默認字符集為utf8mb4字符集但未明確指定排序規(guī)則時:
在MySQL 5.7版本中,默認排序規(guī)則為utf8mb4_general_ci。 在MySQL 8.0版本中,默認排序規(guī)則為utf8mb4_0900_ai_ci。由于utf8mb4_0900_ai_ci排序規(guī)則時MySQL 8.0引入的排序規(guī)則,因此將MySQL 8.0版本的表導(dǎo)入到MySQL 5.7或MySQL 5.6版本時,會存在字符集無法識別的問題。
[Err] 1273 - Unknown collation: ’utf8mb4_0900_ai_ci’
參數(shù)控制在MySQL 5.6版本中,參數(shù)collation_server用于設(shè)置服務(wù)器級別的默認排序規(guī)則。
如果服務(wù)啟動時未指定參數(shù)collation_database的值,則默認繼承參數(shù)collation_server的值。 如果創(chuàng)建數(shù)據(jù)庫時未指定排序規(guī)則,則默認使用參數(shù)collation_database的值。參數(shù)character_set_database和collation_database在MySQL 5.7版本中被遺棄并將在后續(xù)版本中移除。MySQL新增參數(shù)default_collation_for_utf8mb4用于控制使用utf8mb4字符集時的默認排序規(guī)則,取值為utf8mb4_0900_ai_ci或utf8mb4_general_ci參數(shù)default_collation_for_utf8mb4在下列條件中生效:
使用SHOW COLLATION and SHOW CHARACTER SET 命令時。 在創(chuàng)建庫或修改庫指定utf8mb4但未指定編碼規(guī)則時。 在創(chuàng)建表或修改表指定utf8mb4但未指定編碼規(guī)則時。 在增加列或修改列指定utf8mb4但未指定編碼規(guī)則時。 其他使用utf8mb4但未指定編碼規(guī)則時。utf8mb4_unicode_ci和utf8mb4_general_ci對比1、準(zhǔn)確性
utf8mb4_unicode_ci排序規(guī)則基于標(biāo)準(zhǔn)unicode進行排序和比較,能處理特殊的字符,能在各種語音中精確排序。 utf8mb4_general_ci排序規(guī)則沒有基于標(biāo)準(zhǔn)unicode,無法處理部分特殊字符。2、性能
utf8mb4_general_ci排序規(guī)則在排序性能上相對較好 utf8mb4_unicode_ci排序規(guī)則為處理特殊字符實現(xiàn)復(fù)雜的排序算法,性能略差 在大部分場景下,兩者沒有明顯的性能差異補:MySQL--utf8mb4與等值查詢測試測試腳本
## 刪除測試表DROP TABLE IF EXISTS tb2001;DROP TABLE IF EXISTS tb2002;DROP TABLE IF EXISTS tb2003;## 創(chuàng)建測試表CREATE TABLE tb2001(id INT AUTO_INCREMENT PRIMARY KEY,c1 VARCHAR(100) COLLATE utf8mb4_unicode_ci,c2 VARCHAR(100) COLLATE utf8mb4_bin)ENGINE=INNODB DEFAULT CHARSET=utf8mb4 ;CREATE TABLE tb2002(id INT AUTO_INCREMENT PRIMARY KEY,c1 VARCHAR(100) COLLATE utf8mb4_general_ci,c2 VARCHAR(100) COLLATE utf8mb4_bin)ENGINE=INNODB DEFAULT CHARSET=utf8mb4;CREATE TABLE tb2003(id INT AUTO_INCREMENT PRIMARY KEY,c1 VARCHAR(100) COLLATE utf8mb4_0900_ai_ci,c2 VARCHAR(100) COLLATE utf8mb4_bin)ENGINE=INNODB DEFAULT CHARSET=utf8mb4;## 插入測試數(shù)據(jù)INSERT INTO tb2001(c1,c2)VALUES(0xF09F8D83,0xF09F8D83),(0xF09FA68A,0xF09FA68A),(0xF09F8CA0,0xF09F8CA0);INSERT INTO tb2002(c1,c2)VALUES(0xF09F8D83,0xF09F8D83),(0xF09FA68A,0xF09FA68A),(0xF09F8CA0,0xF09F8CA0);INSERT INTO tb2003(c1,c2)VALUES(0xF09F8D83,0xF09F8D83),(0xF09FA68A,0xF09FA68A),(0xF09F8CA0,0xF09F8CA0);## 等值查詢測試SELECT * FROM tb2001 WHERE c1=0xF09F8D83;SELECT * FROM tb2002 WHERE c1=0xF09F8D83;SELECT * FROM tb2003 WHERE c1=0xF09F8D83;SELECT * FROM tb2001 WHERE c2=0xF09F8D83;SELECT * FROM tb2002 WHERE c2=0xF09F8D83;SELECT * FROM tb2003 WHERE c2=0xF09F8D83;
測試結(jié)果
mysql> SELECT * FROM tb2001 WHERE c1=0xF09F8D83;+----+------+------+| id | c1 | c2 |+----+------+------+| 1 | 🍃 | 🍃 || 2 | 🦊 | 🦊 || 3 | 🌠 | 🌠 |+----+------+------+3 rows in set (0.00 sec)mysql> SELECT * FROM tb2002 WHERE c1=0xF09F8D83;+----+------+------+| id | c1 | c2 |+----+------+------+| 1 | 🍃 | 🍃 || 2 | 🦊 | 🦊 || 3 | 🌠 | 🌠 |+----+------+------+3 rows in set (0.01 sec)mysql> SELECT * FROM tb2003 WHERE c1=0xF09F8D83;+----+------+------+| id | c1 | c2 |+----+------+------+| 1 | 🍃 | 🍃 |+----+------+------+1 row in set (0.00 sec)mysql> mysql> SELECT * FROM tb2001 WHERE c2=0xF09F8D83;+----+------+------+| id | c1 | c2 |+----+------+------+| 1 | 🍃 | 🍃 |+----+------+------+1 row in set (0.00 sec)mysql> SELECT * FROM tb2002 WHERE c2=0xF09F8D83;+----+------+------+| id | c1 | c2 |+----+------+------+| 1 | 🍃 | 🍃 |+----+------+------+1 row in set (0.00 sec)mysql> SELECT * FROM tb2003 WHERE c2=0xF09F8D83;+----+------+------+| id | c1 | c2 |+----+------+------+| 1 | 🍃 | 🍃 |+----+------+------+1 row in set (0.00 sec)
測試總結(jié)
使用utf8mb4字符集能存儲特殊字符如表情符號。 utf8mb4_unicode_ci和utf8mb4_general_ci排序規(guī)則無法'正確匹配'特殊字符。 utf8mb4_0900_ai_ci排序規(guī)則能'正確匹配'特殊字符,但僅適用MySQL 8.0版本。 utf8mb4_bin排序規(guī)則基于二級制方式匹配特殊字符,能'正確匹配'特殊字符,適用于MySQL各個版本。到此這篇關(guān)于MySQL中utf8mb4排序規(guī)則示例的文章就介紹到這了,更多相關(guān)MySQL utf8mb4排序內(nèi)容請搜索好吧啦網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持好吧啦網(wǎng)!
相關(guān)文章:
1. Oracle學(xué)習(xí)筆記之二----查詢2. SQL Server 2005 讀取xml 文件 突破 varchar 8000 限制3. SQLite3的綁定函數(shù)族使用與其注意事項詳解4. Access中批量替換數(shù)據(jù)庫內(nèi)容的兩種方法5. 詳解MySQL中的數(shù)據(jù)類型和schema優(yōu)化6. 講解Oracle系統(tǒng)中用戶權(quán)限的賦予和查看7. Linux安裝ODBC連接SQLServer數(shù)據(jù)庫的步驟8. idea連接sql sever2019圖文教程(超詳細)9. Sqlserver之死鎖查詢以及批量解鎖的實現(xiàn)方法10. MySQL算術(shù)/比較/邏輯/位/運算符與正則舉例詳解
