首先如图,在线发送即时消息会正常显示,但离线的中文消息会呈?显示出来,而离线数字消息则正常显示,昵称备注也是如此,就不上图了。
从官方给出的文档及论坛可以看到openfire具有应用层缓存 ,出现这个乱码问题来源于数据库的编码。
解决办法:
首先要保证你为openfire创建的数据库编码是utf8的,建表语句如下:
create database openfire default character set utf8 default collate utf8_general_ci
当你原来就创建好数据库时,你可以用:
alter database openfire default character set utf8 default collate utf8_general_ci;
如果忘记了建库时的编码设置,可以使用 show create table <表名>语句查看表的<CHARSET>编码格式;
其次,在初始化openfire数据库,即第一次配置openfire服务器时,在连接数据库那里的连接串要加入字符编码格式,必须在连接里增加UTF8的编码要求,连接字符串设置如下:
jdbc:mysql://127.0.0.1:3306/openfire?rewriteBatchedStatements=true&useUnicode=true&characterEncoding=utf8
如果已经安装完成,这个配置也是可以改动的,直接到openfire的安装目录下,找到conf/openfire.xml这样一个文件,打开找到如下的XML节,修改其中的serverURL即可
<database>
<defaultProvider>
<driver>com.mysql.jdbc.Driver</driver>
<serverURL>jdbc:mysql://127.0.0.1:3306/openfire?rewriteBatchedStatements=true&useUnicode=true&characterEncoding=utf8</serverURL>
注意:由于&具有特殊含义,因此原&符号必须被转义为&
完成之后重启openfire和mysql,问题解决!