python - 将 unicode 保存到数据库

标签 python mysql django unicode

我正在尝试使用 django 将以下字符串保存到 mysql 数据库(我从其他地方获取了该字符串)

m.cr1 = u"\U0001F3C9" # cr1 is models.CharField(max_length=50)
m.save()

我收到错误

Warning: Incorrect string value: '\xF0\x9F\x8F\x89' for column 'cr1' at row 1

我在这里查看了其他相关问题,并将mysql更改为utf8_unicode_ci,但这没有帮助。一般来说,我的代码可以正常使用 unicode,但在这种特定情况下则不行。

我猜这与这是 32 位 unicode 有关。

我实际上只是想检测这种情况,也许会忽略坏字符。

有什么想法吗?

谢谢

最佳答案

MySQL utf8 并不是真正的 UTF-8,而是一种修改版,仅支持最大 0xFFFF 的代码点。您正在尝试使用 MySQL utf8 中未包含的代码点 (0x1F3C9 > 0xFFFF)。

您需要有相对较新版本的MySQL,并将utf8更改为utf8mb4。无处不在。

连接需要为utf8mb4、排序规则、表/列等。 MySQL 上下文中任何 utf8 都是错误的,需要是 utf8mb4

关于python - 将 unicode 保存到数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14233764/

相关文章:

python - 如何判断我的 Django 应用程序是否在开发服务器上运行?

python - opencv 对象跟踪的边界框定义

python - Pandas 不会丢弃符合条件的行和列

php - 比较提交与数据库的值(value)

mysql - 优化mysql查询

mysql - 如何在不使用 CONCAT() 的情况下连接字段

django - Django、Apache 和 Nginx 的配置

django - django rest framework apiview 中的 format=none 引用是什么?

python - Numpy 向对角线添加值

python - 是否可以从 Django 信号中的请求访问非数据库 key ?