MySQL utf8mb4, 保存表情符号时的错误

MySQL utf8mb4, 保存表情符号时的错误

在互联网时代,表情符号已成为现代通信中必不可少的一部分。表情符号也可以称为Emoji(在日语中缩写为“e”(图象)和“moji”(文字))。

在保存文字时,MySQL utf8mb4编码已经成为通用标准,可支持保存表情符号到数据库。然而,在实际应用中,一些错误会导致表情符号保存失败。本篇文章将介绍如何使用正确的字符集来解决这些问题。

阅读更多:MySQL 教程

什么是utf8mb4?

utf8mb4 是 MySQL 中的字符集,用于编码宽字符集(如表情符号)。utf8mb4 的编码方式,允许编码 Unicode 中的所有字符,因此是处理国际化、多语言数据的首选编码。通常,新版的 MySQL 数据库已经使用了utf8mb4。

保存表情符号出现的错误

当保存表情符号时,会出现以下常见错误。

错误1: 表情符号变成了问号

如果不使用utf8mb4作为字符集,保存表情符号时,表情符号会被MySQL解释成无法识别的字符,变成问号( “?”)。这是因为 MySQL 的默认字符集是 utf8 ,该字符集最多只能表示三个字节,保存表情符号时会产生截断。如果出现这种情况,解决方法是把字符集改为utf8mb4。

例如,以下SQL语句会将表情符号存储为问号。

CREATE TABLE emoji (
    id INT AUTO_INCREMENT PRIMARY KEY,
    name VARCHAR(20) NOT NULL,
    content VARCHAR(255) NOT NULL
) DEFAULT CHARSET=utf8;

如果更改为utf8mb4, 表情符号就能被正确地保存。

CREATE TABLE emoji (
    id INT AUTO_INCREMENT PRIMARY KEY,
    name VARCHAR(20) NOT NULL,
    content VARCHAR(255) NOT NULL
) DEFAULT CHARSET=utf8mb4;

错误2: 数据库错误提示:“ Incorrect string value”

当使用utf8mb4保存表情符号时,MySQL会默认使用 utf8mb4_general_ci 排序规则。但是,在某些情况下,表情符号可能无法在该排序规则下:存储或查找,这就会出现“Incorrect string value”错误。

举个例子:

INSERT INTO emoji (name, content) VALUES ('smile', '😊')

当上面的 SQL 语句执行时,可能会出现以下错误:

#1366 - Incorrect string value: '\xF0\x9F\x98\x8A' for column 'content' at row 1”

这是因为MySQL不确定表情符号如何存放在表中。为解决这种错误,需要更改字符集排序规则。

ALTER TABLE `emoji` CHANGE `content` `content` VARCHAR(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL;

通常,utf8mb4_unicode_ci用于保存表情符号,因为它允许更把多个车语言支持保存到数据中。

总结

在 MySQL utf8mb4 中保存表情符号很容易。但这不意味着错误不会发生。以上提到的错误是如何处理表情符号的过程中经常出现的问题。如果你遇到了存储表情符号的问题时,请先检查是否采用了正确的字符集,更改排序规则即可解决大部分问题。

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程