【问题标题】:MYSQL - Storing unicode characters (emoji) in TEXT columnMYSQL - 在 TEXT 列中存储 unicode 字符(表情符号)
【发布时间】:2026-02-10 04:25:01
【问题描述】:

在尝试向 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 '????????';

编辑

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

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

【问题讨论】:

  • @daxim,道歉 - 现已修复。
  • 你是怎么解决的?通过 SET NAMES utf8mb4?通过更改连接参数?
  • @RickJames,不,我刚刚修复了评论中报告的断开链接,该链接似乎已被删除。此问题仍在处理中。
  • 然后删除您的 cmets,以免我们感到困惑。

标签: mysql unicode character-encoding


【解决方案1】:

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

【讨论】:

    最近更新 更多