mysql - MYSQL - 在 TEXT 列中存储 unicode 字符(表情符号)
问题描述
尝试向MYSQL表中插入unicode emoji字符()时,由于错误导致插入失败;
Incorrect string value: '\\xF0\\x9F\\x98\\x8E\\xF0\\x9F...' for column 'Title' at row 1
从我对这个问题的看法来看,这显然是由表默认字符集引起的,并且可能是列默认字符集设置不正确。这篇文章建议使用utf8mb4
,我已经尝试过,但插入仍然失败。
这是我的表配置;
CREATE TABLE `TestTable` (
`Id` int(11) NOT NULL AUTO_INCREMENT,
`InsertDate` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP,
`Title` text,
`Description` text,
`Info` varchar(250) CHARACTER SET utf8 DEFAULT NULL,
PRIMARY KEY (`Id`),
KEY `xId_TestTablePK` (`Id`)
) ENGINE=InnoDB AUTO_INCREMENT=2191 DEFAULT CHARSET=utf8mb4;
请注意,Title
和Text
列没有明确说明的字符集。最初我没有默认表字符集,并且这两列设置为DEFAULT CHARSET=utf8mb4
. 但是,当我将表的默认字符集更改为相同时,它们被删除(可能是因为列继承了表的类型?)
谁能帮我理解如何将这些 unicode 值存储在我的表中?
值得注意的是,我在 Windows 上,试图在 MYSQL Workbench 上执行此插入。我也尝试使用 C# 插入数据库,用 指定字符集CHARSET=utf8mb4
,但是这返回了相同的错误。
编辑
为了尝试插入这些数据,我正在执行以下操作;
INSERT INTO TestTable (Title) SELECT '';
编辑
不确定这是否相关,但我的数据库也设置了相同的默认字符集;
CREATE DATABASE `TestDB` /*!40100 DEFAULT CHARACTER SET utf8mb4 */;
解决方案
连接需要建立客户端正在通话utf8mb4
,而不仅仅是utf8
。这涉及更改连接时使用的参数。或SET NAMES utf8mb4
在连接后立即执行。
推荐阅读
- html - 网页上除了 CSS Wave Animation 什么都看不到
- php - SQLSTATE [42S22]:找不到列:1054 未知列“名称”,即使它存在于我的数据库表中
- html - 跨越标签在一起而不将文本分成两行
- java - 以编程方式发送大量 SMS - 发送报告问题
- quarkus - 如何在 Quarkus 中输入命令?
- css - 切换到暗模式时角度材质更改按钮样式
- c++ - 涉及 QuantLib::Date、std::min 和 boost/placeholders.hpp 的“C2676 二进制 '<' 运算符”编译错误
- django - django.db.utils.ProgrammingError:关系“testingland_mapcafes”不存在
- python - Pandas:对重复的时间戳重新采样
- react-native - 将 svg 与 webpack 和 storybook 一起使用时出错