我想在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 |
+---------------------------------------------------------------------+
| |
| |
| |
| |
| |
|
这看起来是否正确存储了数据?
答案 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:
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";