openfire是一個非常不錯的IM伺服器,而且是純Java實現,具有多個平台的版本,他的資料存放區可以採用多種資料庫,如MySQL,Oracle等。
在實際使用時大家遇到最多的就是採用MySQL資料庫後的中文亂碼問題,這個問題十分有趣,而且從現象上可以看出openfire內部的一些機制。
實際問題是這樣的:首先啟動openfire伺服器,然後利用用戶端或直接登入到後台建立一個帳戶,為該帳戶指定一些中文的屬性,如姓名等。如果不重啟伺服器,你永遠不會覺得有什麼不對的地方,因為所有的中文顯示都是正常的。接下來重啟一下openfire,再用建立的帳號登入用戶端或進入後台管理端查看,會發現所有的中文全都變成了問號。登入到資料庫中進行查看,發現所有的中文字元也均為問號,這說明了兩個問題:
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;
其次,在初始化openfire資料庫,即第一次配置openfire伺服器時,在串連資料庫那裡的串連串要加入字元編碼格式,必須在串連裡增加UTF8的編碼要求,連接字串設定如下:
jdbc:mysql://127.0.0.1:3306/openfire?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?useUnicode=true&characterEncoding=utf8</serverURL>
注意:由於&具有特殊含義,因此原&符號必須被轉義為&