如何在Python中从数据库中读取非英语字符?

如何在Python中从数据库中读取非英语字符?,python,mysql,unicode,Python,Mysql,Unicode,我正在尝试使用pymysql从python中的mysql数据库中读取条目。数据库中的条目使用区域语言。 e、 g.74Паааааааа是此类条目之一 我编写了如下代码: import pymysql conn = pymysql.connect(ip, user, pass, db, charset="utf8") curr = conn.cursor() curr.execute("select val from my_table") r = cur.fetchone() >>

我正在尝试使用pymysql从python中的mysql数据库中读取条目。数据库中的条目使用区域语言。 e、 g.74Паааааааа是此类条目之一 我编写了如下代码:

import pymysql
conn = pymysql.connect(ip, user, pass, db, charset="utf8")
curr = conn.cursor()
curr.execute("select val from my_table")
r = cur.fetchone()

>>> r
('74 ??????',)
>>> r[0].encode("utf-8").strip()
'74 \xd0\xbf\xd0\xbe\xd0\xb3\xd0\xbe\xd0\xb4\xd0\xb0'

这里我没有得到数据库中存在的数据。

这是因为MySQLdb通常尝试将所有内容编码为拉丁语-1。在重新建立连接后立即执行以下命令可以解决此问题:

db.set_character_set('utf8')
dbc.execute('SET NAMES utf8;')
dbc.execute('SET CHARACTER SET utf8;')
dbc.execute('SET character_set_connection=utf8;')

db是MySQLdb.connect()的结果,dbc是`db.cursor()*。

看看这里:请让我们知道@anatolichmykhalo也是一位来自你的木颈的pythonic大师这是一种简单的打印方法:
a='74\xd0\xbf\xd0\xb0\xb3\xd0\xbe\xd0\xb4\xd0\xb0'>>打印a.decode(“utf-8”)请指定您使用的Python版本。您的示例对于Python2(pymysql确实会返回一个字节字符串,但没有呈现
??
的字节字符串,可以隐式解码然后编码以恢复除问号以外的任何内容)或Python3似乎不一致(其中pymysql将返回一个unicode字符串,如果您的终端严重损坏,该字符串可能会显示为问号;但随后将显示带有
b''
前缀的编码字节字符串)。最后的UTF-8编码输出看起来很好。OP已在
connect()中将连接编码设置为UTF-8
call.pymysql没有
set\u character\u set
方法。您不应该试图通过执行只更改服务器端将使用的编码的查询来设置连接编码,并且不让客户端知道正在使用什么编码,这可能会使其转义失败(东亚编码的安全漏洞).向它抛出所有那些
SET
查询纯粹是迷信。