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

时间:2018-07-06 10:25:53

标签: mysql unicode character-encoding

当尝试将Unicode表情符号字符()插入MYSQL表时,由于错误而导致插入失败;

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设置了这两列。但是,当我将表的默认字符集更改为相同的字符集时,它们被删除了(大概是因为列继承了表的类型?)

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

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

编辑

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

INSERT INTO TestTable (Title) SELECT '';

enter image description here

编辑

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

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

1 个答案:

答案 0 :(得分:2)

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