当前位置:   article > 正文

MySQL 8 中 utf8mb4 的强大:释放多语言数据的潜力_mysql mb4

mysql mb4

在现代 Web 应用程序世界中,支持多种语言和字符集变得越来越重要。随着全球化的兴起,存储和处理多语言数据的需求变得至关重要。MySQL 作为最流行的关系数据库管理系统之一,认识到了这一需求,并在其 8.0 版本中引入了 utf8mb4。在这篇文章中,我们将通过实际示例探讨 utf8mb4 及其在 MySQL 8 中的优势。

作者:Arunjith Aravindan

本文原文:https://www.percona.com/blog/the-power-of-utf8mb4-in-mysql-8-0-unleashing-the-full-potential-of-multilingual-data/

本文约 2000 字,预计阅读需要 7 分钟。

了解 utf8mb4

在深入探讨 utf8mb4 的好处之前,我们先澄清一下 utf8mb4 代表什么。在 MySQL 中,“utf8”是指支持 Unicode 字符集的字符编码,每个字符最多使用三个字节。然而,MySQL 中原始的 utf8 实现并没有涵盖所有 Unicode 字符。另一方面,utf8mb4 是 utf8 的修改版本,它支持完整的 Unicode 字符集,包括表情符号和其他补充字符,每个字符最多使用四个字节。

MySQL 中原始的 utf8 实现仅支持基本多文种平面(BMP)中的字符,大约占所有 Unicode 字符的 90%。另一方面,utf8mb4 支持整个 Unicode 字符集,包括表情符号和其他补充字符。它通过每个字符最多使用四个字节而不是 utf8 使用的三个字节来实现此目的。

下表显示了 utf8 和 utf8mb4 之间的区别:

特征UTF8utf8mb3utf8mb4
每个字符的最大字节数334
支持的字符基本多文种平面 (BMP)BMPBMP + 辅助平面
MySQL 默认YesYesYes(MySQL 8.0 开始)
状态已弃用已弃用未弃用

注意:历史上,MySQL 使用字符集 utf8 作为 utf8mb3 的别名。但是,从 MySQL 8.0.28 开始,utf8mb3 仅在 SHOW 语句的输出和信息架构表中引用该字符集时使用。未来,utf8 有望成为 utf8mb4 的参考。为了避免任何歧义,建议在引用该字符集时显式指定 utf8mb4。

如您所见,utf8、utf8mb3 和 utf8mb4 之间的主要区别在于每个字符的最大字节数。 utf8 和 utf8mb3 只能存储 BMP 中的字符,而 utf8mb4 还可以存储补充平面(Supplementary Plane)中的字符。这意味着 utf8mb4 可以支持更广泛的字符,包括表情符号、数学符号和其他特殊字符。

这三个字符集之间的另一个区别是它们在 MySQL 中的默认状态。utf8 是 MySQL 5.7 及更早版本中的默认字符集,而 utf8mb3 是 MySQL 8.0 中的默认字符集。但是,utf8mb4 是 MySQL 8.0.28 及更高版本中的默认字符集。

最后,MySQL 8.0 中已弃用 utf8 和 utf8mb3。这意味着它们最终将从 MySQL 中删除,因此建议使用 utf8mb4 代替。

因此,如果您需要存储所有 Unicode 字符,包括表情符号和其他补充字符,那么您应该使用 utf8mb4。但是,如果您只需要存储 BMP 中的字符,那么 utf8 可能就足够了。

以下是使用 MySQL 表和查询对 utf8 和 utf8mb4 进行比较的示例:

对比示例

MySQL 5.7

mysql> select version();
+-----------+
| version() |
+-----------+
| 5.7.42-46 |
+-----------+
  • 1
  • 2
  • 3
  • 4
  • 5

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)
  • 1
  • 2
  • 3
  • 4
  • 5
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)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

在用户表中插入三行数据,包括 emoji 表情符号。

mysql> INSERT INTO users (name, email) VALUES
('Arun Jith', 'arunjith@example.com'),
('Jane Doe', 'janedoe@example.com'),
('声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小舞很执着/article/detail/858546
推荐阅读
相关标签