UnicodeEncodeError: 'ascii' codec can't encode character u'\xe9' in position 2: ordinal not in range(128)
我将我的数据库默认值更改为utf-8,而不是“latin”....但仍会出现此错误。为什么呢?
这是在 my.cnf 。我做错了吗?我只想要一切都是UTF-8。
init_connect='SET collation_connection = utf8_general_ci'
init_connect='SET NAMES utf8'
default-character-set=utf8
character-set-server = utf8
collation-server = utf8_general_ci
default-character-set=utf8
答案 0 :(得分:2)
MySQLdb.connect(read_default_ *)选项不会设置default-character-set的字符集。您需要明确设置:
MySQLdb.connect(..., charset='utf8')
或django数据库设置中的等效设置。
答案 1 :(得分:0)
如果从Python获得异常,那么它与MySQL无关 - 错误发生在表达式发送到MySQL之前。我认为MySQLdb驱动程序不处理unicode。
如果您正在处理原始MySQLdb接口,这将有点烦人(像SQLAlchemy这样的数据库包装器将为您处理这些内容),但您可能想要创建这样的函数:
def exec_sql(conn_or_cursor, sql, *args, **kw):
if hasattr(conn_or_cursor):
cursor = conn_or_cursor.cursor()
else:
cursor = conn_or_cursor
cursor.execute(_convert_utf8(sql), *(_convert_utf8(a) for a in args),
**dict((n, _convert_utf8(v)) for n, v in kw.iteritems()))
return cursor
def _convert_utf8(value):
if isinstance(value, unicode):
return value.encode('utf8')
else:
return value