【问题标题】:OperationalError: (2019, ""Can't initialize character set utf8mb4 (path: C:\\mysql\\\\share\\charsets\\)"")OperationalError: (2019, ""Can't initialize character set utf8mb4 (path: C:\\mysql\\\\share\\charsets\\)"")
【发布时间】:2017-04-26 04:29:51
【问题描述】:

我在 settings.py 中配置了我的 Django 数据库设置:

'OPTIONS': {'charset': 'utf8mb4'},

所有列和表都设置为 utf8mb4。

我想要这种编码,这样我就可以存储以下表情符号:????????????????????

当我在 Mac 或 Linux 上启动我的脚本时,它运行良好,但在 Windows 上,我得到:

    <module>    C:\Users\Josh\Documents\mysite\myproj\scripts\crawler.py    154     
    __getitem__ C:\Python27\Lib\site-packages\django\db\models\query.py 295     
    __iter__    C:\Python27\Lib\site-packages\django\db\models\query.py 256     
    _fetch_all  C:\Python27\Lib\site-packages\django\db\models\query.py 1087        
    __iter__    C:\Python27\Lib\site-packages\django\db\models\query.py 54      
    execute_sql C:\Python27\Lib\site-packages\django\db\models\sql\compiler.py  833     
    cursor  C:\Python27\Lib\site-packages\django\db\backends\base\base.py   231     
    _cursor C:\Python27\Lib\site-packages\django\db\backends\base\base.py   204     
    ensure_connection   C:\Python27\Lib\site-packages\django\db\backends\base\base.py   199     
    __exit__    C:\Python27\Lib\site-packages\django\db\utils.py    94      
    ensure_connection   C:\Python27\Lib\site-packages\django\db\backends\base\base.py   199     
    connect C:\Python27\Lib\site-packages\django\db\backends\base\base.py   171     
    get_new_connection  C:\Python27\Lib\site-packages\django\db\backends\mysql\base.py  263     
    Connect c:\users\josh\appdata\local\temp\easy_install-iz3bc1\MySQL_python-1.2.5-py2.7-win32.egg.tmp\MySQLdb\__init__.py 81      
    __init__    c:\users\josh\appdata\local\temp\easy_install-iz3bc1\MySQL_python-1.2.5-py2.7-win32.egg.tmp\MySQLdb\connections.py  221     
    set_character_set   c:\users\josh\appdata\local\temp\easy_install-iz3bc1\MySQL_python-1.2.5-py2.7-win32.egg.tmp\MySQLdb\connections.py  312     
"OperationalError: (2019, ""Can't initialize character set utf8mb4 (path: C:\\mysql\\\\share\\charsets\\)"")"   

它引发异常的代码行是:

Object.objects.filter(last_scraped__isnull=True)[0]

版本:

Python 2.7

数据库:MariaDB 5.5

Windows 7 64 位

【问题讨论】:

  • 只有在运行manage.py时才会发生这种情况吗?
  • 尝试使用标准的 'utf8' - 它几乎涵盖了所有符号。
  • @AndreyShipilov 不,这是由 Apache 在 CentOS 服务器上运行的。
  • @EugeneLisitsky 真的吗?你知道它覆盖和不覆盖多少个 iPhone 表情符号吗?
  • @user,是的,因为 SO 以 utf-8 编码输出它们。这是一个标题:Content-Type: text/html; charset=utf-8

标签: python mysql django windows mariadb


【解决方案1】:

这既不是 Django 也不是 Mysql 的问题,而是 Windows 的问题。不幸的是,它支持 unicode 并不是最好的方式。

我从 2004 年开始在 Windows XP 上使用 Django 0.9。时不时我会遇到奇怪的错误。后来我搬到了 Cygwin,其中一些消失了,但有些仍然存在。问题在于 Windows 中内置的编码机制。只迁移到 Linux,然后 Mac 帮助我避免了这种“Geizenbugs”。

所以你说的很对:

当我在 Mac 或 Linux 上启动我的脚本时,它运行良好,但在 Windows 上,我得到 [错误]。

最佳选择 - 切换到 Mac 或 Linux。如果您不想完全迁移到 *nix,您可以使用 Windows 环境并将 Django 和 Mysql 放入虚拟环境,如 Vagrant 或 Docker。

我已经在我的宠物项目中测试了你的表情符号。

这里是 django 管理界面:

这里是电报机器人:

一切正常。

我用:

  • heroku 托管 (linux)
  • PostgreSQL(但不依赖数据库)
  • Python 3.5.2
  • 所有作品均采用 UTF-8 编码。

【讨论】:

    猜你喜欢
    • 2018-02-09
    • 1970-01-01
    • 2022-01-10
    • 2021-09-22
    • 2013-09-18
    • 2013-05-04
    • 2022-06-22
    • 2021-08-11
    • 1970-01-01
    相关资源
    最近更新 更多