【问题标题】:Django + MySQL - Unknown encoding: utf8mb4Django + MySQL - 未知编码:utf8mb4
【发布时间】:2014-02-26 08:22:14
【问题描述】:

MySQL 5.5.35 Django 1.6.1

为了支持数据库中的表情,我在我的django设置中进行了配置:

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

在 MySQL 连接上,我收到此错误: LookupError:未知编码:utf8mb4

我应该如何配置 Django/MySQL 以支持 utf8mb4?

【问题讨论】:

  • 您可能需要验证正在使用的 MySQL 版本。

标签: mysql django


【解决方案1】:

https://code.djangoproject.com/ticket/18392#comment:10

作为一种解决方法,您可以让 python 将 'utf8mb4' 理解为别名 对于“utf8”:

import codecs
codecs.register(lambda name: codecs.lookup('utf8') if name == 'utf8mb4' else None)

【讨论】:

  • @ChrisSH - 我不记得我把它放在哪里了......它需要运行一次,并且可能在它建立数据库连接之前。也许在__init__.pysettings.py
  • 这也适用于 sqlalchemy 连接 mysql 数据库。
  • @GünayGültekin - 我认为 issue is specific to the db adapter used with sqlalchemy 而不是 sqlalchemy 本身。您使用的是哪个适配器?
  • @GünayGültekin - 你试过传递charset arg as shown in the docs吗?您的适配器似乎应该支持开箱即用的utf8mb4(根据文档)。
【解决方案2】:

如果你真的需要 utf8mb4, 按照https://mathiasbynens.be/notes/mysql-utf8mb4 中的步骤进行操作,然后 确保您的 python 包“MySQL-python”版本 >= 1.2.5 !

【讨论】:

    【解决方案3】:

    快速简便的方法。

    connection = mysql.connector.connect(user='username',
                                       password='mypass',
                                        host='localhost',
                                         database='mydb',
                                           use_pure=True,
                                          charset='utf8'
                                          )
    

    【讨论】:

    • 仅代码的答案不好。一个解释(有适当的参考)将使这个答案值得投票:)
    【解决方案4】:

    这适用于我的情况(MySQL 5.7 + Django 3.1):

    配置 Django:

    'ENGINE': 'django.db.backends.mysql',
    'OPTIONS': {
     'charset': 'utf8mb4' 
    }
    

    配置 MySQL 数据库

    1. 确保所有 db 表都使用 InnoDB 存储引擎(这很重要;如果您跳过它,下一步可能会失败)
    2. 将所有表的排序规则更改为 utf8mb4_general_ci

    【讨论】:

      猜你喜欢
      • 2019-01-21
      • 2019-04-03
      • 2017-07-10
      • 1970-01-01
      • 2016-11-13
      • 2016-11-28
      • 2016-01-07
      • 2011-05-21
      相关资源
      最近更新 更多