感谢支持
我们一直在努力

OpenStack 数据库中文乱码问题

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

本文永久更新链接地址:http://www.linuxidc.com/Linux/2014-08/105142.htm

赞(0) 打赏
转载请注明出处:服务器评测 » OpenStack 数据库中文乱码问题
分享到: 更多 (0)

听说打赏我的人,都进福布斯排行榜啦!

支付宝扫一扫打赏

微信扫一扫打赏