表达式utf8mb4没有在MySQL 5.6中正确存储表情符号

时间:2015-05-18 03:07:40

标签: mysql character-encoding collation emoji utf8mb4

我正在尝试将表情符号存储到我服务器中的数据库中。我使用AWS EC2实例作为服务器,我的服务器详细信息如下:

  

操作系统:ubuntu0.14.04.1

     

MySQL版本:5.6.19-0ubuntu0.14.04.1 - (Ubuntu)

     

数据库客户端版本:libmysql - mysqlnd 5.0.11-dev - 20120503

我在服务器中使用以下SQL创建了一个数据库测试和表格表情符号:

2015-06-15T09:00:00+09:00

当我尝试执行以下插入时,会出现警告并且数据未正确存储:

CREATE DATABASE IF NOT EXISTS `test` DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;
USE `test`;

CREATE TABLE IF NOT EXISTS `emoji` (
  `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `text` varchar(255) NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB  DEFAULT CHARSET=utf8mb4 AUTO_INCREMENT=1;
  

插入的行ID:3

     

警告:#1366字符串值不正确:' \ xF0 \ x9F \ x91 \ x86 \ xF0 ......'对于专栏' text'在第1行

文本列中存储的值为: ???? ???? ???? ????

我的本​​地数据库使用相同的方案,并正确存储值。除了操作系统(Windows)之外,我的本地几乎所有配置都相似。

3 个答案:

答案 0 :(得分:3)

我能够使用SqlWorkbench重新创建您的问题。

您的客户端很可能已建立与其字符集与表的字符集不匹配的数据库的连接:

在运行insert语句以对齐字符集和连接的排序规则之前运行此语句:

SET NAMES utf8mb4 COLLATE utf8mb4_general_ci

希望这会有所帮助,字符集可能会很棘手。

答案 1 :(得分:0)

尝试使用以下堆栈Node-Js 12.13.x和Mysql 5.6将表情符号保存在我现有的数据库表中。

方法:

  1. 要么遵循此solution
  2. 或将列数据类型更改为 BLOB ,即

ALTER TABLE table_name CHANGE column column BLOB NULL

希望这个技巧对您有用!

答案 2 :(得分:-1)

使用工作台从MSSQL迁移到MySQL总是遇到问题。

工作台已经设置了utf8mb4,并且仍然出现错误。

然后我遵循@Haisum Usman的建议:

  1. 在生成的迁移SQL上将列设置为Blob。
  2. 迁移数据
  3. 将列更改为LONGTEXT!

投入大量时间来使它工作。