2011-08-16 9 views
5

Jaki jest powód następującego błędu? gdy próbuję filtrować z:błąd zestawienia pytjan django

if MyObject.objects.filter(location = aDictionary['address']): 

gdzie lokalizacja jest zdefiniowany jako:

location = models.CharField(max_length=100, blank=True, default='') 

pojawia się następujący błąd podczas aDictionary [ „adres”] zawiera ciąg o charakterze non-alfanumerycznym (dla przykład Kīhei):

File "/usr/lib/pymodules/python2.6/MySQLdb/connections.py", line 35, in defaul 
terrorhandler 
    raise errorclass, errorvalue 
_mysql_exceptions.OperationalError: (1267, "Illegal mix of collations (latin1_sw 
edish_ci,IMPLICIT) and (utf8_general_ci,COERCIBLE) for operation '='") 

Odpowiedz

6

Alter bazy danych w MySQL tak:

ALTER TABLE foo CONVERT TO CHARACTER SET utf8 COLLATE utf8_general_ci; 

Podczas tworzenia nowej bazy danych należy pamiętać, aby utworzyć z prawem gromadzić ustawienia:

CREATE DATABASE foo CHARACTER SET utf8 COLLATE utf8_general_ci; 

więcej dyskusji here.

+0

Zaleca się usunięcie bazy danych, w tym wszystkich jej tabel i ewentualnie danych produkcyjnych, w celu zmiany sortowania? A może zamiast tego zmienić instrukcje ALTER? – Jordan

+0

Podkreślam, że kiedy napotkałem ten problem, wszyscy doktorzy stwierdzili, że potrzebuję DROP i CREATE. Więc zbadałem i masz rację. Post edytowany. –

+0

Wygląda dobrze dla mnie :) – Jordan

0

Python używa łańcuchów Unicode, a baza danych nie. Zmień sortowanie bazy danych, aby użyć utf8 i wszystko powinno być w porządku.