在mysql中存储emojies

时间:2017-11-19 23:25:23

标签: mysql

我想在mysql(版本5.7.18)中存储emojies。

我的表格结构如下:

 CREATE TABLE `message_message` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `message` longtext CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci,
  `created_at` datetime(6) NOT NULL,
  `is_read` tinyint(1) NOT NULL,
  `chat_id` int(11) NOT NULL,
  PRIMARY KEY (`id`)) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8 COLLATE=utf8_bin;

我正在尝试仅在message字段中保存表情符号,我可以看到它会以问号(?☺️???)保存。

我有没有办法直接从表中读取这些值(实际上我希望在表查看器中看到表情符号)。我正在使用SequelPro查看表格(如果重要的话)。

我正在运行的精确mysql查询 INSERT INTO message_message(message, created_at, msg_sender_id, chat_id, is_read) VALUES ('', UTC_TIME(), 110, 164, False)

如果我在此表上运行select查询,它看起来像这样: +---------------------------------------------------------------------+ | message | +---------------------------------------------------------------------+ | | | | | | | | | | |

这看起来是否正确存储了数据?

3 个答案:

答案 0 :(得分:2)

显然,您的数据存储正确。

您为F09F9281F09F918D提供了此字符串SELECT hex(message),用于插入

的数据
INSERT INTO message_message(message, created_at, msg_sender_id, chat_id, is_read) VALUES ('', UTC_TIME(), 110, 164, False)

如果一个人检查UTF8两个emojis:

    {li> F0 9F 92 81 {li> F0 9F 91 8D
然后你会发现那些与你已经拥有的完全匹配。

这意味着您的代码是正确的,如果您的GUI应用程序有任何问题 - 它是GUI应用程序配置或unicode支持问题,并且有点超出stackoverflow的主题。

参考文献:

答案 1 :(得分:1)

我认为您的表格排序也必须正确配置:

 CREATE TABLE `message_message` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `message` longtext CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci,
  `created_at` datetime(6) NOT NULL,
  `is_read` tinyint(1) NOT NULL,
  `chat_id` int(11) NOT NULL,
  PRIMARY KEY (`id`)) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin;

答案 2 :(得分:1)

确保您的表格排名为CHARACTER SET utf8mb4 COLLATE utf8mb4_bin,要更新此项(在您的情况下),查询将为:

ALTER TABLE message_message CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_bin

确保数据库的默认排序规则为utf8mb4,要更新此标识,查询将为:

SELECT default_character_set_name FROM information_schema.SCHEMATA S WHERE schema_name = "DBNAME";