2009-07-29 43 views
11

我有一個用Django寫的項目。這應該存放一些字符串中的所有領域都應該是UTF-8,但是,當我運行如何在django中設置表格char列的編碼?

manage.py syncdb 

所有各列與CP1252字符集創建(在哪裏得到它 - 我沒有想法),我必須手動更新每一列...

有沒有辦法讓Django在第一時間創建所有那些使用UTF-8編碼的列?

順便說一句,我使用MySQL。

回答

18

Django在CREATE TABLE語句中未指定字符集和歸類。一切都由數據庫字符集決定。做ALTER DATABASE ... CHARACTER SET utf8 COLLATE utf8_general_ci運行前syncdb應該有所幫助。

對於連接,Django自動發出SET NAMES utf8,因此您不必擔心默認連接字符集設置。

4

Django的數據庫後端會自動將Unicode字符串處理爲適當的編碼並與數據庫交談。你不需要告訴Django你的數據庫使用了什麼編碼。它通過使用數據庫的編碼來處理它。

我看不出有什麼辦法可以告訴django使用某些特定的編碼創建一列。 在我看來,絕對有一些以前的MySQL配置會影響你。 儘管對所有色譜柱進行手動操作,但請使用這些色譜柱。

CREATE DATABASE db_name 
    [[DEFAULT] CHARACTER SET charset_name] 
    [[DEFAULT] COLLATE collation_name] 

ALTER DATABASE db_name 
    [[DEFAULT] CHARACTER SET charset_name] 
    [[DEFAULT] COLLATE collation_name] 
2

什麼是你的MySQL編碼設置爲?

例如,嘗試從以下命令行:

mysqld --verbose --help | grep character-set 

如果沒有輸出UTF8,那麼你就需要設置在my.cnf輸出:

[mysqld] 
character-set-server=utf8 
default-collation=utf8_unicode_ci 

[client] 
default-character-set=utf8 

這個頁面有一些更多的信息:

+0

如果我沒有弄錯,Django已經連接了SET NAMES utf8。 – drdaeman 2009-07-29 08:00:26

+0

它說latin1,所以cp1252是mysqladmin的問題。 您建議的這些設置似乎隻影響命令行客戶端 – 2009-07-29 08:15:40

相關問題