python - 将unicode象形文字保存到mysql

标签 python mysql django utf-8 collation

我有一些代码(在 django 服务器上)将 POST 请求中包含的 json 数据写入 mysql 数据库。 一些请求包含特定的象形图,如 📸 或 🦁。 这些应该写入文本字段,但会导致数据库错误。

处理请求的代码看起来像

            json_data = json.loads(request.body.decode('utf-8'))
            i = Event(event=json_data['event'], dt=parse(json_data['dt']),
                      object_id=json_data['object_id'], user_id=json_data['user_id'],
                      payload=json_data['payload'])
            i.save()

数据库排序规则当前设置为 uft8_general_ci。

返回的错误是“不正确的字符串值”。

将此类请求与其他请求一起保存到数据库的最佳做法是什么?

更新:通过将排序规则更改为 utf8mb4_general_ci,我现在可以将这些符号直接写入数据库(通过 phpmyadmin),但 python 请求仍然没有成功。同样的错误。 django 那边有什么东西吗?

最佳答案

将 MySQL 字符集更改为 utf8mb4 将允许您将象形图直接序列化到数据库,但为了在 Django 端修复此问题,您还必须更新您的 settings.py(见下文):

DATABASES = {
    'default': {
        'ENGINE':'django.db.backends.mysql',
        'NAME': 'mydatabase',
        'OPTIONS': {'charset': 'utf8mb4'},
    } }

另见 MySQL “incorrect string value” error when save unicode string in Django

关于python - 将unicode象形文字保存到mysql,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54732504/

相关文章:

php - SQL计数数据和数组数据如何一起发送?

python - django `makemigrations` 底层是如何工作的?

python - 如何在 django/python 中使用 win32com Dispatch?

Python BeautifulSoup 从 find_all() 返回错误的输入列表

python - 如何确定一个数字是否是任何类型的 int(核心或 numpy,有符号或无符号)?

Python 命令行参数可以为空或来自选择列表

php - 左连接上的 2 列

Mysql:数字数组与数百万其他数组之间的相似性

python - 使用 Django 的多个 ManyToMany 'in' 查询

python - HDFS(WebHDFS)输入/创建失败-getaddrinfo失败