Python将“ó”存储为“³”

时间:2012-08-28 05:29:12

标签: python mysql encoding

我使用scrapy从网站获取信息,根据w3验证器是utf-8 ..

我的python项目有

# -*- coding: utf-8 -*-

我收到了一些像LópezJ这样的名字,当我打印出来时,它表现得很好......

但是当我想将它存储到mysql中时,我得到一些关于ascii无法编码等等等等的错误...

如果我使用.encode ('ascii', 'ignore'),我会得到:Lpez J 如果我使用.encode ('ascii', 'replace'),我会得到:López J 如果我使用.encode ('utf-8'),我会得到:López J

我该怎么办? 我在这里遇到了大麻烦:'(

2 个答案:

答案 0 :(得分:2)

当您连接到数据库时,请使用charset='utf-8', use_unicode=True和其他关键字connect()方法。这应该使dababase接受并返回unicode值,因此您不必(也不应该)手动编码它们。

示例:

>>> import MySQLdb
>>> conn = MySQLdb.connect(... , use_unicode=True, charset='utf8')
>>> cur = conn.cursor()
>>> cur.execute('CREATE TABLE testing(x VARCHAR(20))')
0L
>>> cur.execute('INSERT INTO testing values(%s)', ('López J',))
1L
>>> cur.execute('SELECT * FROM testing')
1L
>>> print cur.fetchall()[0][0]
López J

答案 1 :(得分:1)

检查您的server, database, table, columnconnection字符集。

作为快速测试,请尝试执行

SET NAMES 'utf8';

连接后立即。

相关问题