最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

探索MySQL?8中utf8mb4釋放多語言數(shù)據(jù)的強大潛力

 更新時間:2023年12月12日 08:50:43   作者:愛可生開源社區(qū)  
這篇文章主要為大家介紹了探索MySQL?8中utf8mb4釋放多語言數(shù)據(jù)的強大潛力,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪

引言

在現(xiàn)代 Web 應(yīng)用程序世界中,支持多種語言和字符集變得越來越重要。隨著全球化的興起,存儲和處理多語言數(shù)據(jù)的需求變得至關(guān)重要。MySQL 作為最流行的關(guān)系數(shù)據(jù)庫管理系統(tǒng)之一,認(rèn)識到了這一需求,并在其 8.0 版本中引入了 utf8mb4。在這篇文章中,我們將通過實際示例探討 utf8mb4 及其在 MySQL 8 中的優(yōu)勢。

翻譯自

作者:Arunjith Aravindan

本文原文:https://www.percona.com/blog/the-power-of-utf8mb4-in-mysql-8-...

了解 utf8mb4

在深入探討 utf8mb4 的好處之前,我們先澄清一下 utf8mb4 代表什么。在 MySQL 中,“utf8”是指支持 Unicode 字符集的字符編碼,每個字符最多使用三個字節(jié)。然而,MySQL 中原始的 utf8 實現(xiàn)并沒有涵蓋所有 Unicode 字符。另一方面,utf8mb4 是 utf8 的修改版本,它支持完整的 Unicode 字符集,包括表情符號和其他補充字符,每個字符最多使用四個字節(jié)。

MySQL 中原始的 utf8 實現(xiàn)僅支持基本多文種平面(BMP)中的字符,大約占所有 Unicode 字符的 90%。另一方面,utf8mb4 支持整個 Unicode 字符集,包括表情符號和其他補充字符。它通過每個字符最多使用四個字節(jié)而不是 utf8 使用的三個字節(jié)來實現(xiàn)此目的。

下表顯示了 utf8 和 utf8mb4 之間的區(qū)別:

特征UTF8utf8mb3utf8mb4
每個字符的最大字節(jié)數(shù)334
支持的字符基本多文種平面 (BMP)BMPBMP + 輔助平面
MySQL 默認(rèn)YesYesYes(MySQL 8.0 開始)
狀態(tài)已棄用已棄用未棄用

注意:歷史上,MySQL 使用字符集 utf8 作為 utf8mb3 的別名。但是,從 MySQL 8.0.28 開始,utf8mb3 僅在 SHOW 語句的輸出和信息架構(gòu)表中引用該字符集時使用。未來,utf8 有望成為 utf8mb4 的參考。為了避免任何歧義,建議在引用該字符集時顯式指定 utf8mb4。

如您所見,utf8、utf8mb3 和 utf8mb4 之間的主要區(qū)別在于每個字符的最大字節(jié)數(shù)。 utf8 和 utf8mb3 只能存儲 BMP 中的字符,而 utf8mb4 還可以存儲補充平面(Supplementary Plane)中的字符。這意味著 utf8mb4 可以支持更廣泛的字符,包括表情符號、數(shù)學(xué)符號和其他特殊字符。

這三個字符集之間的另一個區(qū)別是它們在 MySQL 中的默認(rèn)狀態(tài)。utf8 是 MySQL 5.7 及更早版本中的默認(rèn)字符集,而 utf8mb3 是 MySQL 8.0 中的默認(rèn)字符集。但是,utf8mb4 是 MySQL 8.0.28 及更高版本中的默認(rèn)字符集。

最后,MySQL 8.0 中已棄用 utf8 和 utf8mb3。這意味著它們最終將從 MySQL 中刪除,因此建議使用 utf8mb4 代替。

因此,如果您需要存儲所有 Unicode 字符,包括表情符號和其他補充字符,那么您應(yīng)該使用 utf8mb4。但是,如果您只需要存儲 BMP 中的字符,那么 utf8 可能就足夠了。

以下是使用 MySQL 表和查詢對 utf8 和 utf8mb4 進(jìn)行比較的示例:

對比示例

MySQL 5.7

mysql> select version();
+-----------+
| version() |
+-----------+
| 5.7.42-46 |
+-----------+

Table

mysql> CREATE TABLE users (
  id INT AUTO_INCREMENT PRIMARY KEY,
  name VARCHAR(255) CHARACTER SET utf8,
  email VARCHAR(255) CHARACTER SET utf8
);
Query OK, 0 rows affected (0.03 sec)
mysql> show create table usersG
*************************** 1. row ***************************
       Table: users
Create Table: CREATE TABLE `users` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `name` varchar(255) CHARACTER SET utf8 DEFAULT NULL,
  `email` varchar(255) CHARACTER SET utf8 DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1
1 row in set (0.01 sec)

在用戶表中插入三行數(shù)據(jù),包括 emoji 表情符號。

mysql> INSERT INTO users (name, email) VALUES
('Arun Jith', 'arunjith@example.com'),
('Jane Doe', 'janedoe@example.com'),
('??', 'emoji@example.com');
ERROR 1366 (HY000): Incorrect string value: 'xF0x9Dx8Cx86' for column 'name' at row 3
mysql>

遇到的錯誤消息 ERROR 1366 (HY000): Incorrect string value: ‘xF0x9Dx8Cx86’ for column ‘name’ at row 3, 第 3 行的 name 字段的字符編碼存在問題。用戶表嘗試將 Unicode 字符 ?? 插入 name 字段時發(fā)生錯誤。

mysql> INSERT INTO users (name, email) VALUES
('Arun Jith', 'arunjith@example.com'),
('Jane Doe', 'janedoe@example.com')
;
Query OK, 2 rows affected (0.00 sec)
Records: 2  Duplicates: 0  Warnings: 0

MySQL 8.0

mysql> select version();
+-------------------------+
| version()               |
+-------------------------+
| 8.0.33-0ubuntu0.22.04.2 |
+-------------------------+

Table

CREATE TABLE users (
  id INT AUTO_INCREMENT PRIMARY KEY,
  name VARCHAR(255) CHARACTER SET utf8,
  email VARCHAR(255) CHARACTER SET utf8
);
mysql> show create table usersG
*************************** 1. row ***************************
       Table: users
Create Table: CREATE TABLE `users` (
  `id` int NOT NULL AUTO_INCREMENT,
  `name` varchar(255) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci DEFAULT NULL,
  `email` varchar(255) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci
1 row in set (0.00 sec)

該表的 name 和 email 字段均使用 utf8mb3 字符集。這意味著該表可以存儲 BMP 中的所有字符,但不能存儲表情符號或其他補充字符。

Query

INSERT INTO users (name, email) VALUES
('Arun Jith', 'arunjith@example.com'),
('Jane Doe', 'janedoe@example.com'),
('??', 'emoji@example.com');

與前面的示例一樣的錯誤( ERROR 1366 (HY000): Incorrect string value: ‘xF0x9Dx8Cx86’ for column ‘name’ at row 3, )。

mysql> INSERT INTO users (name, email) VALUES
    -> ('Arun Jith', 'arunjith@example.com'),
    -> ('Jane Doe', 'janedoe@example.com'),
    -> ('??', 'emoji@example.com');
ERROR 1366 (HY000): Incorrect string value: 'xF0x9Dx8Cx86' for column 'name' at row 3
mysql> INSERT INTO users (name, email) VALUES
    -> ('Arun Jith', 'arunjith@example.com'),
    -> ('Jane Doe', 'janedoe@example.com')
    -> ;
Query OK, 2 rows affected (0.00 sec)
Records: 2  Duplicates: 0  Warnings: 0

此查詢將前兩行數(shù)據(jù)插入用戶表中。前兩行包含簡單的文本數(shù)據(jù),而第三行包含emoji 表情符號。表情符號將無法正確存儲在數(shù)據(jù)庫中,因為 utf8 字符集無法存儲 emoji 表情符號。

Output

mysql> SELECT * FROM users;
+----+-----------+----------------------+
| id | name      | email                |
+----+-----------+----------------------+
|  4 | Arun Jith | arunjith@example.com |
|  5 | Jane Doe  | janedoe@example.com  |
+----+-----------+----------------------+
2 rows in set (0.00 sec)

此查詢將從用戶表中選擇兩行。查詢的輸出將是用戶表中所有行的列表,包括每個用戶的 IDname、email。第三行有表情符號的無法存儲,插入時出錯,因為 utf8 字符集無法存儲表情符號。

Table

為了確保正確存儲表情符號,讓我們使用 utf8mb4 字符集創(chuàng)建表列。之后,我們可以繼續(xù)檢查表情符號插入是否正確。

mysql> CREATE TABLE users (
    ->   id INT AUTO_INCREMENT PRIMARY KEY,
    ->   name VARCHAR(255) CHARACTER SET utf8mb4,
    ->   email VARCHAR(255) CHARACTER SET utf8mb4
    -> );
Query OK, 0 rows affected (0.03 sec)
mysql> show create table usersG
*************************** 1. row ***************************
Table: users
Create Table: CREATE TABLE `users` (
`id` int NOT NULL AUTO_INCREMENT,
`name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL,
`email` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci
1 row in set (0.00 sec)

Query

INSERT INTO users (name, email) VALUES
('Arun Jith', 'arunjith@example.com'),
('Jane Doe', 'janedoe@example.com'),
('??', 'emoji@example.com');
mysql> INSERT INTO users (name, email) VALUES
    -> ('Arun Jith', 'arunjith@example.com'),
    -> ('Jane Doe', 'janedoe@example.com'),
    -> ('??', 'emoji@example.com');
Query OK, 3 rows affected (0.01 sec)
Records: 3  Duplicates: 0  Warnings: 0

該表對 name 和 email 列均使用 utf8mb4 字符集。這意味著該表可以存儲完整 Unicode 字符集中的所有字符,包括 emoji 表情符號和其他補充字符。

此查詢將三行數(shù)據(jù)插入用戶表中。前兩行包含簡單的文本數(shù)據(jù),而第三行包含表情符號。表情符號將正確存儲在數(shù)據(jù)庫中,因為 utf8mb4 字符集可以存儲表情符號。

Output

mysql> SELECT * FROM users;
+----+-----------+----------------------+
| id | name      | email                |
+----+-----------+----------------------+
|  1 | Arun Jith | arunjith@example.com |
|  2 | Jane Doe  | janedoe@example.com  |
|  3 | ??         | emoji@example.com    |
+----+----------+-----------------------+
3 rows in set (0.00 sec)

此查詢將從用戶表中選擇所有行。查詢的輸出將是用戶表中所有行的列表,包括每個用戶的 ID、name、email。表情符號將被存儲為表情符號,因為 utf8mb4 字符集可以存儲表情符號。

總結(jié)

如您所見,utf8mb4 字符集可以存儲完整 Unicode 字符集中的所有字符,包括表情符號和其他補充字符。這使得它成為存儲復(fù)雜文本數(shù)據(jù)、文本搜索和比較的不錯選擇。另一方面,utf8 字符集只能存儲 BMP 中的字符。這意味著它無法存儲表情符號或其他補充字符。

一般來說,建議所有新應(yīng)用程序都使用 utf8mb4。這將確保您的數(shù)據(jù)可以正確存儲和處理,無論它包含什么字符。

以上就是探索MySQL 8中utf8mb4釋放多語言數(shù)據(jù)的強大潛力的詳細(xì)內(nèi)容,更多關(guān)于MySQL utf8mb4多語言數(shù)據(jù)的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

最新評論

华坪县| 靖边县| 光山县| 清徐县| 密云县| 正定县| 屯昌县| 泰来县| 库伦旗| 遵义县| 永城市| 轮台县| 右玉县| 讷河市| 南陵县| 宁安市| 开江县| 东乌| 辽阳市| 瓦房店市| 和硕县| 曲水县| 岑巩县| 延津县| 铁岭市| 佛教| 家居| 常山县| 长垣县| 宜兰市| 宁城县| 顺昌县| 杭州市| 双辽市| 沅陵县| 商城县| 故城县| 临颍县| 兴山县| 中江县| 女性|