5

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

操作系统:ubuntu0.14.04.1

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

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

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

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;

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

INSERT INTO  `test`.`emoji` (`id` , `text`) VALUES (NULL ,  '   ');

插入的行 ID:3

警告:#1366 不正确的字符串值:'\xF0\x9F\x91\x86 \xF0...' 用于第 1 行的列 'text'

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

相同的场景适用于我的本地数据库,并且值已正确存储。除了操作系统(Windows)之外,我本地的几乎所有配置都相似。

4

3 回答 3

5

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

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

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

SET NAMES utf8mb4 COLLATE utf8mb4_general_ci

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

于 2016-12-25T00:38:47.953 回答
0

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

方法:

  1. 要么遵循这个解决方案
  2. 或者将列数据类型更改为BLOB

ALTER TABLE table_name CHANGE column column BLOB NULL

希望这个技巧对你有用!

于 2020-04-03T11:57:28.547 回答
-1

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

Workbench 已经设置了 utf8mb4,但仍然出现错误。

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

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

投入大量时间来完成这项工作。

于 2020-09-17T15:06:59.553 回答