解決openfire在使用MySQL數據庫後的中文亂碼問題(轉)

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&amp;characterEncoding=utf8</serverURL>

注意:由於&具有特殊含義,因此原&符號必須被轉義爲&amp;

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章