我正在尝试使用 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/