OperationalError: (2019, ""Can't initialize character set utf8mb4 (path: C:\\mysql\\\\shar
Posted
技术标签:
【中文标题】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\\)"")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
【参考方案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 编码。【讨论】:
以上是关于OperationalError: (2019, ""Can't initialize character set utf8mb4 (path: C:\\mysql\\\\shar的主要内容,如果未能解决你的问题,请参考以下文章
sqlite3.OperationalError:靠近“BatchID”:语法错误
sqlite3.OperationalError:靠近“%”:语法错误
如何知道哪个进程负责“OperationalError:数据库已锁定”?
将站点部署到 Azure 时出现“OperationalError:数据库已锁定”