歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux基礎 >> Linux教程 >> OpenStack 數據庫中文亂碼問題

OpenStack 數據庫中文亂碼問題

日期:2017/2/28 14:29:14   编辑:Linux教程

openstack的sql connection 需要配置成utf-8才不會中文亂碼

sql_connection = mysql://nova:xxx@qa-mysql1:3306/nova?charset='utf-8'

但是如果之前就沒有設置utf-8,數據庫又不能隨便清空,想要更新openstack數據庫某個字段,就不能直接采用utf-8的數據庫連接,否則會出現插入到數據庫中的是中文,但是openstack中顯示的是亂碼。更壞的是如果插入的是全角中文字符,openstack就會出錯。

那麼如何更新這種情況下的數據庫呢?

答案很簡單,就是采用和openstack一樣的數據庫連接方式,openstack使用的是 sqlalchemy 我寫一個一個簡單的數據庫連接如下

#!/usr/bin/python
# coding=utf-8

from sqlalchemy import create_engine
from sqlalchemy import MetaData
from sqlalchemy.sql import select
from sqlalchemy.sql import update

engine = create_engine('mysql://nova:password@qa-mysql1:3306/nova',convert_unicode=True)

metadata=MetaData()
meta=metadata
meta.reflect(bind=engine)
conn=engine.connect()
secgroup=meta.tables['security_groups']

u=update(secgroup).where(secgroup.c.id==60).values(name='中文')
result=conn.execute(u)

這裡需要注意的是在create_engine的時候,需要添加convert_unicode=True,如果不添加,會出如下解碼錯誤的錯誤

query = query % db.literal(args)
File "/usr/share/pyshared/MySQLdb/connections.py", line 264, in literal
return self.escape(o, self.encoders)
File "/usr/share/pyshared/MySQLdb/connections.py", line 202, in unicode_literal
return db.literal(u.encode(unicode_literal.charset))
UnicodeEncodeError: 'latin-1' codec can't encode characters in position 0-1: ordinal not in range(256)

在Ubuntu 12.10 上安裝部署Openstack http://www.linuxidc.com/Linux/2013-08/88184.htm

Ubuntu 12.04 OpenStack Swift單節點部署手冊 http://www.linuxidc.com/Linux/2013-08/88182.htm

OpenStack雲計算快速入門教程 http://www.linuxidc.com/Linux/2013-08/88186.htm

企業部署OpenStack:該做與不該做的事 http://www.linuxidc.com/Linux/2013-09/90428.htm

CentOS 6.5 x64bit 快速安裝OpenStack http://www.linuxidc.com/Linux/2014-06/103775.htm

Copyright © Linux教程網 All Rights Reserved