Django 操作错误 2019 无法初始化字符集 utf8mb4



我整天都在为此苦苦挣扎,无法找到解决方案,甚至无法找到错误的根本原因。 当我在本地运行我的应用程序时,它工作正常。 我的生产实例正在使用 Heroku cedar 堆栈和 Amazon RDS MySQL 数据库。

在我的设置文件中,我有:'OPTIONS': {'charset': 'utf8mb4'}

当我推送到 Heroku 时,它崩溃并显示错误:_mysql_exceptions.OperationalError: (2019, "Can't initialize character set utf8mb4 (path: /usr/share/mysql/charsets/)")

异常位置:/app/.heroku/python/lib/python2.7/site-packages/MySQLdb/connections.py in set_character_set, line 298

我已经使用 Amazon RDS MySQL 创建了适当的数据库参数,当前设置如下:

+--------------------------+-------------------------------------------+
| Variable_name            | Value                                     |
+--------------------------+-------------------------------------------+
| character_set_client     | utf8mb4                                   |
| character_set_connection | utf8mb4                                   |
| character_set_database   | utf8mb4                                   |
| character_set_filesystem | binary                                    |
| character_set_results    | utf8mb4                                   |
| character_set_server     | utf8mb4                                   |
| character_set_system     | utf8                                      |
| character_sets_dir       | /rdsdbbin/mysql-5.6.13.R1/share/charsets/ |
+--------------------------+-------------------------------------------+

我正在运行:

MySQL 5.6.13
MySQL-python==1.2.4

提前感谢您的帮助。 如果我缺少更多详细信息,请告诉我。

事实证明,问题出在 Heroku 和他们对所需库缺乏支持上:

以下是Heroku的支持人员告诉我的:

这种编码需要最新版本的MySQL的libmysqlclient。 C 共享库。抱歉,我们目前没有升级计划 这个图书馆在不久的将来。您可以构建自己的版本 的二进制依赖项,请按照以下说明进行操作 https://devcenter.heroku.com/articles/buildpack-binaries

对于未来的读者:截至2014年底,这个特定问题的解决方案是使用cedar-14堆栈,其中包括最新的mysql二进制文件(由我测试)。一个通用的解决方案是编译你自己的二进制文件并创建一个自定义的构建包,正如heroku人所建议的那样。

例如

🐾是utf8mb4。许多像那些奇怪的图片一样的角色都是。

最新更新