我有Openfire的问题,特别是对表情符号字符的支持.我在互联网上搜索发现,为了支持表情符号,我必须将数据库和表的编码和校对更改为UTF-8 unicode(utf8mb4).我已经使用以下sql命令完成了这项工作:
SET NAMES utf8mb4;
ALTER DATABASE openfire CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci;
ALTER TABLE ofOffline CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
所以在上面的语句中,我正在更改数据库和表的字符集和排序规则.接下来,我读到我应该更改JDBC驱动程序以支持unicode.我的系统属性中的“database.defaultProvider.serverURL”条目具有以下值(使用Openfire管理网页):
jdbc:MysqL://localhost:3306/openfire?rewriteBatchedStatements=true&useUnicode=true&characterEncoding=UTF-8&characterSetResults=UTF-8
当我在两个在线用户之间用表情符号发送消息时,它可以完美无瑕.当邮件的收件人处于脱机状态时,邮件将存储到数据库中,这就是出错的地方:表情符号未正确存储在数据库中(它存储为两个问号).
我的CREATE TABLE语句如下所示:
CREATE TABLE `ofMessageArchive` (
`messageID` bigint(20) DEFAULT NULL,`conversationID` bigint(20) NOT NULL,`fromJID` varchar(255) COLLATE utf8mb4_unicode_ci NOT NULL,`fromJIDResource` varchar(100) COLLATE utf8mb4_unicode_ci DEFAULT NULL,`toJID` varchar(255) COLLATE utf8mb4_unicode_ci NOT NULL,`toJIDResource` varchar(100) COLLATE utf8mb4_unicode_ci DEFAULT NULL,`sentDate` bigint(20) NOT NULL,`stanza` mediumtext COLLATE utf8mb4_unicode_ci,`body` mediumtext COLLATE utf8mb4_unicode_ci,KEY `ofMessageArchive_con_idx` (`conversationID`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
我尝试使用以下查询获取节文本(其中包含表情符号)(请注意,消息73只包含一个字符:表情符号):
SELECT stanza,HEX(stanza) FROM ofOffline WHERE messageID = 73
这给了我(左边的 – 签署消息,右边是十六进制值):
原文链接:https://www.f2er.com/mysql/433240.html