MYSQL - 在 TEXT 列中存储 unicode 字符(表情符号)

标签 mysql unicode character-encoding

尝试向MYSQL表中插入unicode emoji字符(😎)时,插入失败;

Incorrect string value: '\\xF0\\x9F\\x98\\x8E\\xF0\\x9F...' for column 'Title' at row 1

从我对这个问题的看法来看,这显然是由表默认字符集和可能的列默认字符集设置不正确引起的。 This post建议使用 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;

请注意,TitleText 列没有明确说明的字符集。最初我没有默认的表字符集,并且将这两列设置为 DEFAULT CHARSET=utf8mb4。但是,当我将表的默认字符集更改为相同时,它们被删除了(大概是因为列从表继承了类型?)

任何人都可以帮助我了解如何将这些 un​​icode 值存储在我的表中吗?

值得注意的是,我在 Windows 上尝试在 MYSQL Workbench 上执行此插入操作。我也尝试过使用 C# 插入数据库,使用 CHARSET=utf8mb4 指定字符集,但是这返回了相同的错误。

编辑

为了尝试插入此数据,我正在执行以下操作;

INSERT INTO TestTable (Title) SELECT '😎😎';

enter image description here

编辑

不确定这是否相关,但我的数据库也设置了相同的默认字符集;

CREATE DATABASE `TestDB` /*!40100 DEFAULT CHARACTER SET utf8mb4 */;

最佳答案

连接 需要确定客户端 正在谈论utf8mb4,而不仅仅是utf8。这涉及更改连接时使用的参数。或者在连接后立即执行 SET NAMES utf8mb4

关于MYSQL - 在 TEXT 列中存储 unicode 字符(表情符号),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51208322/

相关文章:

Mysql 'Not Like' 通配符超过两次查询

java - 从 Windows 控制台中的 Java 代码问题打印出 unicode

java - 将非 ASCII 符号降级为最接近的 7 位 ASCII 等价物(最好是 Java)

python - 允许输入 Unicode 转义作为命令行参数

python - 无法将度数符号输入 raw_input

python - Facebook 帖子数据未获得正确的字符编码

php - mysql_real_escape_string() 完全删除字符串

java - 在 Spring 中使用事务进行同步

algorithm - 产生url安全数据的压缩算法

mysql - sql创建带外键的表