"无法使用Windows mysql-python初始化字符集utf8mb4"

Jug*_*ish 9 python mysql windows mysql-python utf8mb4

我收到错误尝试通过python 2.7 + MySQLdb 1.2.5 + sqlalchemy 1.0.9从Windows 7客户端连接到远程mysql数据库.这是最近将服务器的默认字符集更改为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)
Run Code Online (Sandbox Code Playgroud)

错误是:

  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\\)")
Run Code Online (Sandbox Code Playgroud)

服务器的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
Run Code Online (Sandbox Code Playgroud)

我从Ubuntu客户端连接到数据库没有问题,所以我怀疑问题出在Windows客户端而不是服务器的配置上.

MySQL文档建议错误消息可能是由于客户端编译时没有多字节字符集支持:

http://dev.mysql.com/doc/refman/5.7/en/cannot-initialize-character-set.html

但是,由于这是Windows,我只是下载客户端而无法控制其编译标志.

我尝试过以各种方式安装MySQLdb:

  • 从dev.mysql.com下载并安装MySQL Connector/Python .msi
  • 从pypi下载并安装MySQLdb 1.2.5 .exe
  • 从Windows命令提示符运行"pip install mysql-python"

这些都导致MySQLdb库似乎无法处理utf8mb4字符集.

任何帮助将非常感激!

小智 0

我一直在兜圈子,试图让它在 Windows 上运行。

唯一对我有用的事情就是在建立连接后执行此操作:

set names utf8mb4;
Run Code Online (Sandbox Code Playgroud)