经测试,我们的开发环境解决中文字符问题的解决办法是同一到utf-8编码:
一、py源文件采用utf8编码,在文件开始添加
#coding=UTF-8
二、在使用MySQLdb建立和mysql数据库的连接并建立cursor对象时采用如下函数
def getConnection(self): try: host=self.getSetting('host') user=self.getSetting('user') passwd=self.getSetting('password') port=self.getSetting('port',3306) db=self.getSetting('database') conn=MySQLdb.connect(host=host,port=port,user=user,passwd=passwd,db=db ,cursorclass=MySQLdb.cursors.DictCursor ,use_unicode=False, charset=self.dbCharset); ##do char magic conn.set_character_set(self.dbCharset) return conn; except Exception,ex: print "connect mysql db failure! using settings: host=%s,user=%s,passwd=%s,port=%s,db=%s"%(host,user,passwd,port,db) print ex; def getCursor(self,conn): cursor = conn.cursor(); cursor.execute('SET NAMES %s;' % self.dbCharset) cursor.execute('SET CHARACTER SET %s;' % self.dbCharset) return cursor;三、客户端(浏览器)传回的字符一律是采用utf8编码
这一直都工作的很好,中文字符顺利存入数据库并可以读取出来。直到有一天我们需要按照中文字段内容进行查询,无论采用什么手段,甚至在sql语句中直接写入utf8的字符编码,都不能获取符合条件的数据,同样的语句在管理工具中却能顺利的查询出来数据!看来还是MySQLdb传递过程中的问题,终于我看到了这两行代码
cursor.execute('SET NAMES %s;' % self.dbCharset) cursor.execute('SET CHARACTER SET %s;' % self.dbCharset)当我注释掉这两行代码之后,上帝啊,终于查到数据了!最终getCursor方法变成这个样子:
def getCursor(self,conn): cursor = conn.cursor(); #cursor.execute('SET NAMES %s;' % self.dbCharset) #cursor.execute('SET CHARACTER SET %s;' % self.dbCharset) return cursor;摒弃了任何额外的处理,至于为什么,这篇文章和这篇文章说的很细致,你可以研究一下,不过我是没有想明白,明明都是同一的utf8编码,是为什么就不行呢?望达者不吝赐教。