【发布时间】:2016-12-13 07:30:22
【问题描述】:
尝试从一个远程 mysql 数据库连接到一个错误 Windows 7 客户端通过 python 2.7 + MySQLdb 1.2.5 + sqlalchemy 1.0.9。这是最近将服务器的默认字符集更改为 utf8mb4 的结果。服务器正在运行 MySQL 5.5.50。
我是这样连接的:
DB_ENGINE = sqlalchemy.create_engine("mysql+mysqldb://{user}:{pass}@{host}:{port}/{database}?charset=utf8mb4".format(**DB_SETTINGS))
Session = sqlalchemy.orm.sessionmaker(bind=DB_ENGINE)
错误是:
File "C:\Applications\Python27\lib\site-packages\sqlalchemy\engine\default.py", line 385, in connect
return self.dbapi.connect(*cargs, **cparams)
File "C:\Applications\Python27\lib\site-packages\MySQLdb\__init__.py", line 81, in Connect
return Connection(*args, **kwargs)
File "C:\Applications\Python27\lib\site-packages\MySQLdb\connections.py", line 221, in __init__
self.set_character_set(charset)
File "C:\Applications\Python27\lib\site-packages\MySQLdb\connections.py", line 312, in set_character_set
super(Connection, self).set_character_set(charset)
sqlalchemy.exc.OperationalError: (_mysql_exceptions.OperationalError) (2019, "Can't initialize character set utf8mb4 (path: C:\\mysql\\\\share\\charsets\\)")
服务器的 my.cnf 包含以下内容:
init_connect = 'SET collation_connection = utf8mb4_unicode_ci'
init_connect = 'SET NAMES utf8mb4'
character-set-server = utf8mb4
collation-server = utf8mb4_unicode_ci
skip-character-set-client-handshake
我从 Ubuntu 客户端连接到数据库没有问题,所以我怀疑问题出在 Windows 客户端而不是服务器的配置上。
MySQL 文档表明错误消息可能是由于客户端在不支持多字节字符集的情况下进行编译:
http://dev.mysql.com/doc/refman/5.7/en/cannot-initialize-character-set.html
但是,由于这是 Windows,我只是下载客户端,无法控制其编译标志。
我尝试过多种方式安装 MySQLdb:
- 从 dev.mysql.com 下载并安装 MySQL 连接器/Python .msi
- 从 pypi 下载并安装 MySQLdb 1.2.5 .exe
- 从 Windows 命令提示符运行“pip install mysql-python”
这些中的每一个都会导致一个似乎无法处理 utf8mb4 字符集的 MySQLdb 库。
任何帮助将不胜感激!
【问题讨论】:
-
涉及什么版本的MySQL?? utf8mb4 直到 5.5.3 才可用。
-
抱歉没有包括在内——我正在运行 MySQL 5.5.50
-
请记住,当您以
root连接时,init_connect不会被执行。 -
我正在使用带有 utf8 编码的数据库,并且所有必需的标准 unicode 微笑都可以。你用 utf8 测试过吗?
标签: python mysql windows mysql-python utf8mb4