在SAE(新浪云)上搭建微信公众账号的服务器,使用到MySQL数据库,我需要在数据库中存储中文字段,并读取出来,发送给用户。
我采用python语言的flask操作,期间遇到了中文字段读出为 ??????? 的问题,已解决,喜悦,所以将解决方案总结下分享给大家。
首先,在MySQL建数据库的时候,要选择utf-8编码, 中文字段用 varchar格式 就可以
然后在我们server用python的flask框架,装饰器来实现数据库select操作的时候需要注意以下两点,即可实现。
1. 在文件第二句注明编码方式 #encoding=utf-8
2. 在connect中添加一句 charset = 'utf8',注意无论是用装饰器还是直接在函数中调用 MySQLdb.connect( )方法都一样
#这是文件开头,表明编码方式,第一句是所有.py文件必须写的,第二句是防止数据库中文字段读取出错必须写的
# -*- coding:utf8 -*-
#encoding = utf-8
import time
import MySQLdb
#这是采用装饰器实现数据库连接操作,注意到MySQLdb.connect(... charset='utf8'),注意小写
from sae.const import (MYSQL_HOST, MYSQL_HOST_S, MYSQL_PORT, MYSQL_USER, MYSQL_PASS, MYSQL_DB)
@app.before_request
def before_request():
g.db = MySQLdb.connect(MYSQL_HOST, MYSQL_USER, MYSQL_PASS, MYSQL_DB, port = int(MYSQL_PORT), charset = 'utf8')
@app.teardown_request
def teardown_request(exception):
if hasattr(g, 'db'): g.db.close()
#注意row[-1]读取的就是中文字段,用unicode转码就能输出字符串啦
@app.route('/',methods=['GET','POST'])
def wechat_auth():
if request.method == 'POST':
c = g.db.cursor()
c.execute("select * from my_fridge")
msgs = list(c.fetchall())
number = len(msgs)
content += str(number)+'\\n'
for row in msgs:
content += unicode(row[-1])