2016-12-15 35 views
1

我有一个字符字段,它是utf8我希望它是utf8mb4,我如何通过Django的迁移来完成该操作?如何使用Django的迁移来更改字符集和排序规则?

+0

你是指单独的字段还是所有字符字段? Django的文档提到[设置](https://docs.djangoproject.com/en/1.10/ref/databases/#connecting-to-the-database),但我认为这是db宽 – Sayse

+0

@Sayse预先存在的字段。 –

回答

2

Django不支持不同的字符集。您告诉它CharField,它在内部使用Unicode,它在与RDBMS交谈时使用UTF-8,而RDMBS的工作是将字符串转换为用于存储的编码。

https://docs.djangoproject.com/en/1.10/ref/databases/#encoding

Django的假定所有数据库使用UTF-8编码。

注意MySQL调用utf8mb4的事情是什么其他人(包括Django的)调用UTF-8,和那个什么MySQL调用UTF8是UTF-8的一个子集,不存在于其他地方。

因此,Django不支持任何有关数据库字符字段编码的混乱。它期望您使用支持所有Unicode字符的编码创建数据库,并且在与数据库客户端(即使用Django)通信时,RDBMS使用UTF-8。

+1

这并不回答有关迁移现有数据库的问题,也很大程度上不正确。 Django从来没有对utf8mb4的第一次订单支持,没有等同,跟踪器上仍然存在4年前的问题,但仍然存在关于Django无法处理的fk长度限制的问题。您可以通过专门为此目的的charset覆盖DATABASE设置中的连接编码。如果必须的话,你也可以传递连接初始化参数。我想我只会使用runPython。 –

相关问题