欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

 更新時間:2023年12月12日 08:50:43   作者:愛可生開源社區(qū)  
這篇文章主要為大家介紹了探索MySQL?8中utf8mb4釋放多語言數(shù)據(jù)的強(qiáng)大潛力,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(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 字符集,包括表情符號和其他補(bǔ)充字符,每個字符最多使用四個字節(jié)。

MySQL 中原始的 utf8 實現(xiàn)僅支持基本多文種平面(BMP)中的字符,大約占所有 Unicode 字符的 90%。另一方面,utf8mb4 支持整個 Unicode 字符集,包括表情符號和其他補(bǔ)充字符。它通過每個字符最多使用四個字節(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 還可以存儲補(bǔ)充平面(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 字符,包括表情符號和其他補(bǔ)充字符,那么您應(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 中的所有字符,但不能存儲表情符號或其他補(bǔ)充字符。

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)

此查詢將從用戶表中選擇兩行。查詢的輸出將是用戶表中所有行的列表,包括每個用戶的 ID、name、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 表情符號和其他補(bǔ)充字符。

此查詢將三行數(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)

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

總結(jié)

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

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

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

相關(guān)文章

  • mysql 5.7.13 安裝配置方法圖文教程(linux)

    mysql 5.7.13 安裝配置方法圖文教程(linux)

    這篇文章主要為大家詳細(xì)介紹了linux下mysql 5.7.13 安裝配置方法圖文教程,感興趣的小伙伴們可以參考一下
    2016-06-06
  • mysql密碼忘記怎么辦

    mysql密碼忘記怎么辦

    mysql密碼忘記怎么辦?卸載重裝?這篇文章主要為大家詳細(xì)介紹了不卸載也能重新設(shè)置密碼的方法,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-02-02
  • Ubuntu手動安裝mysql5.7.10

    Ubuntu手動安裝mysql5.7.10

    這篇文章主要為大家詳細(xì)介紹了Ubuntu手動安裝mysql5.7.10的詳細(xì)過程,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-02-02
  • MySQ實現(xiàn)XA事務(wù)的具體使用

    MySQ實現(xiàn)XA事務(wù)的具體使用

    XA事務(wù)是一種分布式事務(wù)處理協(xié)議,本文主要介紹了MySQ實現(xiàn)XA事務(wù)的具體使用,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2024-07-07
  • MySQL的鎖機(jī)制使用詳解

    MySQL的鎖機(jī)制使用詳解

    這篇文章主要介紹了MySQL的鎖機(jī)制使用方式,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-04-04
  • MySQL的InnoDB擴(kuò)容及ibdata1文件瘦身方案完全解析

    MySQL的InnoDB擴(kuò)容及ibdata1文件瘦身方案完全解析

    在使用InnoDB存儲引擎后,MySQL的ibdata1文件常常會占據(jù)大量存儲空間,這里我們就為大家?guī)鞰ySQL的InnoDB擴(kuò)容及ibdata1文件瘦身方案完全解析:
    2016-06-06
  • MySQL備份Shell腳本的實現(xiàn)

    MySQL備份Shell腳本的實現(xiàn)

    本文主要介紹了Shell腳本來自動備份MySQL數(shù)據(jù)庫,腳本會備份指定數(shù)據(jù)庫或所有數(shù)據(jù)庫,按日期命名備份文件以防止覆蓋,并自動刪除N天前的舊備份以節(jié)省空間,具有一定的參考價值,感興趣的可以了解一下
    2025-03-03
  • MySQL優(yōu)化之如何了解SQL的執(zhí)行頻率

    MySQL優(yōu)化之如何了解SQL的執(zhí)行頻率

    MySQL 客戶端連接成功后,通過 show [session|global]status 命令 可以提供服務(wù)器狀態(tài)信息,也可以在操作系統(tǒng)上使用 mysqladmin extended-status 命令獲得這些消息
    2014-05-05
  • MySQL使用select語句查詢指定表中指定列(字段)的數(shù)據(jù)

    MySQL使用select語句查詢指定表中指定列(字段)的數(shù)據(jù)

    本文介紹MySQL數(shù)據(jù)庫中執(zhí)行select查詢語句,查詢指定列的數(shù)據(jù),即指定字段的數(shù)據(jù),需要的朋友可以參考下
    2016-11-11
  • 關(guān)于mysql數(shù)據(jù)庫誤刪除后的數(shù)據(jù)恢復(fù)操作說明

    關(guān)于mysql數(shù)據(jù)庫誤刪除后的數(shù)據(jù)恢復(fù)操作說明

    下面小編就為大家?guī)硪黄P(guān)于mysql數(shù)據(jù)庫誤刪除后的數(shù)據(jù)恢復(fù)操作說明。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-03-03

最新評論