2009-07-29 10 views
11

Mam projekt napisany w Django. Wszystkie pola, które powinny przechowywać niektóre ciągi mają być w UTF-8, jednak gdy uruchamiamJak ustawić kodowanie kolumn char w tabelach w django?

manage.py syncdb 

wszystkie odpowiednie kolumny są tworzone z zestawu znaków CP1252 (gdzie to dostać, że - ja nie mam pomysł) i muszę ręcznie aktualizować każdą kolumnę ...

Czy istnieje sposób, aby powiedzieć Django, aby utworzył wszystkie te kolumny z kodowaniem UTF-8 w pierwszej kolejności?

BTW, używam MySQL.

Odpowiedz

18

Django nie określa zestawu znaków i zestawiania w instrukcjach CREATE TABLE. Wszystko zależy od zestawu znaków bazy danych. Przed uruchomieniem ALTER DATABASE ... CHARACTER SET utf8 COLLATE utf8_general_ci powinno pomóc.

Dla połączenia, Django automatycznie wydaje SET NAMES utf8, więc nie musisz się martwić o domyślne ustawienia zestawu znaków.

+0

Jeśli jesteś ciekawy, możesz zobaczyć 'CREATE TABLE 'Statystyce SQL poprzez' ./manage.py sqlall appname'. Nie mam serwera MySQL w pobliżu, ale jestem pewny, że nie będzie żadnego zestawu znaków/zestawienia. Tak więc, sortowania będą określane na podstawie ustawień bazy danych. – drdaeman

+1

Tak, to chyba wystarczy, dziękuję. Kodowanie cp1252 wydaje się być problemem mysqladmin. –

4

Django baz danych obsługuje automatycznie ciągi Unicode do odpowiedniego kodowania i rozmowę z bazą danych. Nie musisz mówić Django o tym, jakie kodowanie używa twoja baza danych. Obsługuje to dobrze, używając kodowania bazy danych.

Nie widzę sposobu, aby powiedzieć django, aby utworzyć kolumnę za pomocą określonego kodowania. Wygląda na to, że ma to wpływ na pewną wcześniejszą konfigurację MySQL. I pomimo robienia tego ręcznie dla wszystkich kolumn, użyj ich.

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

Do czego służy zestaw kodowania MySQL?

Na przykład, spróbuj wykonać następujące czynności z poziomu wiersza poleceń:

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

Jeśli nie wyjście utf8, to musisz ustawić wyjście w my.cnf:

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

[client] 
default-character-set=utf8 

Ta strona ma trochę więcej informacji:

+0

Jeśli się nie mylę, Django już robi 'SET NAMES utf8' na połączeniu. – drdaeman

+0

Mówi łaciński1, więc cp1252 był problemem mysqladmin. Te sugerowane ustawienia wydają się mieć wpływ tylko na klienta wiersza poleceń. –

+0

Nie, sekcja [mysqld] jest przeznaczona specjalnie na czas serwera. Mam domyślny zbiór w moim pliku, ale być może to zmieniło się w wersjach. Zobacz sekcję "Określanie ustawień znaków przy starcie serwera" na tej stronie: http://dev.mysql.com/doc/refman/5.0/en/charset-applications.html – ars

Powiązane problemy