濮阳杆衣贸易有限公司

主頁 > 知識庫 > MySQL中utf8mb4排序規(guī)則示例

MySQL中utf8mb4排序規(guī)則示例

熱門標(biāo)簽:400電話可以辦理嗎 大眾點評星級酒店地圖標(biāo)注 拉卡拉外呼系統(tǒng) 話務(wù)外呼系統(tǒng)怎么樣 外東北地圖標(biāo)注 高清地圖標(biāo)注道路 智能外呼系統(tǒng)復(fù)位 云南電商智能外呼系統(tǒng)價格 臨清電話機器人

在MySQL中常見的utf8mb4排序規(guī)則有:

  • utf8mb4_0900_ai_ci
  • utf8mb4_unicode_ci
  • utf8mb4_general_ci

當(dāng)設(shè)置表的默認(rèn)字符集為utf8mb4字符集但未明確指定排序規(guī)則時:

  • 在MySQL 5.7版本中,默認(rèn)排序規(guī)則為utf8mb4_general_ci。
  • 在MySQL 8.0版本中,默認(rèn)排序規(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ù)器級別的默認(rèn)排序規(guī)則。

  • 如果服務(wù)啟動時未指定參數(shù)collation_database的值,則默認(rèn)繼承參數(shù)collation_server的值。
  • 如果創(chuàng)建數(shù)據(jù)庫時未指定排序規(guī)則,則默認(rèn)使用參數(shù)collation_database的值。

參數(shù)character_set_database和collation_database在MySQL 5.7版本中被遺棄并將在后續(xù)版本中移除。
MySQL新增參數(shù)default_collation_for_utf8mb4用于控制使用utf8mb4字符集時的默認(rèn)排序規(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)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

您可能感興趣的文章:
  • 如何更改MySQL數(shù)據(jù)庫的編碼為utf8mb4
  • MySQL字符集utf8修改為utf8mb4的方法步驟
  • 詳解JDBC對Mysql utf8mb4字符集的處理
  • Spring Data Jpa Mysql使用utf8mb4編碼的示例代碼
  • 設(shè)置mysql5.7編碼集為utf8mb4的方法
  • 全面了解mysql中utf8和utf8mb4的區(qū)別

標(biāo)簽:三明 阿里 福州 定西 溫州 山西 揚州 無錫

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《MySQL中utf8mb4排序規(guī)則示例》,本文關(guān)鍵詞  MySQL,中,utf8mb4,排序,規(guī)則,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問題,煩請?zhí)峁┫嚓P(guān)信息告之我們,我們將及時溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《MySQL中utf8mb4排序規(guī)則示例》相關(guān)的同類信息!
  • 本頁收集關(guān)于MySQL中utf8mb4排序規(guī)則示例的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章
    承德县| 富民县| 湛江市| 九台市| 蚌埠市| 瑞金市| 南阳市| 清新县| 马鞍山市| 莱西市| 浦县| 闽清县| 镇沅| 宜昌市| 扎兰屯市| 宜兴市| 饶平县| 高雄县| 顺昌县| 仁化县| 台北市| 砀山县| 辰溪县| 黄龙县| 方正县| 姜堰市| 株洲县| 陆良县| 陇西县| 丰宁| 凯里市| 荔波县| 广汉市| 镇平县| 襄城县| 兖州市| 漳浦县| 化隆| 阳新县| 开鲁县| 平顺县|