欢迎您访问 最编程 本站为您分享编程语言代码,编程技术文章!
您现在的位置是: 首页

探索MySQL 8的强大功能:utf8mb4解锁多语言数据新世界(简化版)

最编程 2024-07-23 13:08:17
...
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)

该表的 nameemail 字段均使用 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

此查询将前两行数据插入用户表中。前两行包含简单的文本数据,而第三行包含emoji 表情符号。表情符号将无法正确存储在数据库中,因为 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)

此查询将从用户表中选择两行。查询的输出将是用户表中所有行的列表,包括每个用户的 IDnameemail。第三行有表情符号的无法存储,插入时出错,因为 utf8 字符集无法存储表情符号。

Table

为了确保正确存储表情符号,让我们使用 utf8mb4 字符集创建表列。之后,我们可以继续检查表情符号插入是否正确。

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

该表对 nameemail 列均使用 utf8mb4 字符集。这意味着该表可以存储完整 Unicode 字符集中的所有字符,包括 emoji 表情符号和其他补充字符。

此查询将三行数据插入用户表中。前两行包含简单的文本数据,而第三行包含表情符号。表情符号将正确存储在数据库中,因为 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)

此查询将从用户表中选择所有行。查询的输出将是用户表中所有行的列表,包括每个用户的 IDnameemail。表情符号将被存储为表情符号,因为 utf8mb4 字符集可以存储表情符号。

总结

如您所见,utf8mb4 字符集可以存储完整 Unicode 字符集中的所有字符,包括表情符号和其他补充字符。这使得它成为存储复杂文本数据、文本搜索和比较的不错选择。另一方面,utf8 字符集只能存储 BMP 中的字符。这意味着它无法存储表情符号或其他补充字符。

一般来说,建议所有新应用程序都使用 utf8mb4。这将确保您的数据可以正确存储和处理,无论它包含什么字符。

更多技术文章,请访问:opensource.actionsky.com/

关于 SQLE

SQLE 是一款全方位的 SQL 质量管理平台,覆盖开发至生产环境的 SQL 审核和管理。支持主流的开源、商业、国产数据库,为开发和运维提供流程自动化能力,提升上线效率,提高数据质量。