Openstack數據庫中文亂碼問題---Django Python SQLAlchemg MySQL

  對Openstack進行二次開發的時候,遇到很多中文編碼的問題。Openstack與數據庫的映射使用的是 SQLAlchemg,中文在web頁面中顯示沒有太大問題,但是在數據庫中存放的中文數據全是亂碼。  一.最開始以爲是Python的原因,因爲Python默認的字符編碼是ascii,是不支持中文的。因此使用以下方法對python系統的默認編碼進行了修改:>>>import sys>>>sys.getdefaultencoding()獲取當前系統的默認編碼, 可能會報AttributeError: 'module' object has no attribute 'setdefaultencoding'的錯誤,執行:>>>reload(sys)再執行以上命令就可以順利通過。在python的安裝目錄下$python_home/site-packages文件夾下新建一個sitecustomize.py.內容爲:

  1. # encoding=utf8

  2. import sys  


  3. reload(sys)  

  4. sys.setdefaultencoding('utf8')   

 重啓Python解釋器後重新執行sys.getdefaultencoding(),即可發現編碼已經設置爲UTF-8。

二.完成以上設置後,並沒有解決我所遇到的問題,於是繼續研究Openstack nova中的db模塊,並在Google中尋找答案。之後將目光放在了SQLAlchemg上,幸運的找到了這篇文章http://www.cnblogs.com/firefish/archive/2008/11/15/sqlalchemy.html

     其中提到用'.decode('gbk').encode('utf8')對中文內容進行編碼。這個方法之前已經試過,並不管用。於是繼續往後面看,文章中又提到SQLAlchemg支持在數據庫url中指定connection的編碼格式,指定方式如下:

'mysql://uid:pwd@localhost/mydb?charset=utf8'  。

於是找到Openstack nova的配置文件/etc/nova/nova.conf 其中有一行配置爲sql_connection,果斷在url後加上‘?charset=utf8',重啓nova所有相關服務,問題得到解決。

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