SQLAlchemy将UTF-8作为Latin1字符串返回

Zag*_*ags 2 python unicode sqlalchemy utf-8 latin1

我有一个用UTF-8编码的MySQL数据库,但是当我用SQLAlchemy(Python 2.7)连接它时,我得到了带有Latin1 Unicode字符的字符串.

因此,比利时(België)的荷兰语拼写出来了

'Belgi\xeb'
Run Code Online (Sandbox Code Playgroud)

而不是

'Belgi\xc3\xab'
Run Code Online (Sandbox Code Playgroud)

或者,理想情况下是Unicode对象

u'Belgi\xeb'
Run Code Online (Sandbox Code Playgroud)

Zag*_*ags 7

根据文档(http://docs.sqlalchemy.org/en/rel_0_9/core/engines.html#custom-dbapi-args):

如果use_unicode = 1参数或charset参数作为连接参数传递,MySQLdb将容纳Python unicode对象.

如果没有此设置,许多MySQL服务器安装默认为客户端连接的latin1编码.

你需要使用

create_engine('mysql+mysqldb://HOSTNAME/DATABASE?charset=utf8')
Run Code Online (Sandbox Code Playgroud)

而不仅仅是

create_engine('mysql+mysqldb://HOSTNAME/DATABASE')
Run Code Online (Sandbox Code Playgroud)