在Python中查询时,MySQL特殊字符丢失了。 (但与Django合作。)

时间:2015-09-30 03:42:50

标签: python mysql django

我有一个utf8编码的MySQL数据库。它包含一个值为“sauté”的行。注意e上的重音。

当我使用Django应用程序选择此数据时,它会正确检测到é。但是,当我作为Python程序执行它时,这些信息(特殊e)似乎丢失了。

我尝试了各种编码和解码组合以及“来自将来导入unicode_literals”并在sauté字符串前加上“u”并将u放在查询字符串前面。没运气。如何从我的数据库(使用Python)中正确地获取此信息并对其进行测试?

# Connection when excute as .py:  (Django is usual in settings.py)
cursor = MySQLdb.connect(host='<xxx>',user="<xxx>", passwd="<xxx>", db="<xxx>",
          unix_socket = 'path/mysql.sock'
          ).cursor() 

# Same code in Django and Python execution:

cursor.execute(select line from my_table where id = 27)
results = cursor.fetchall()
for r in results:
    line = r[0]
    if re.search("sauté", line):
        do_something() # Should get here, but only with Django

1 个答案:

答案 0 :(得分:0)

感谢JD Vangsness(在评论中)的答案。

我需要添加charset =&#39; utf8&#39;连接参数。

requests

然后我还需要将比较字符串设为unicode:

cursor = MySQLdb.connect(host='<xxx>',user="<xxx>", charset='utf8', passwd="<xxx>", db="<xxx>", unix_socket = 'path/mysql.sock').cursor()