2016-12-15 78 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。 –

相關問題