2009-07-02 16 views
20

widzęDjango zestaw znaków z MySQL niesamowitość

OperationalError (1267, "Illegal mix of collations (latin1_swedish_ci,IMPLICIT) and (utf8_general_ci,COERCIBLE) for operation '='") 

To wygląda jak niektórzy z moich zmiennych są ciągi UTF8

'name': „p \ xc7 \ x9d \ xca \ x87 \ xc9 \ x9f \ xc4 \ xb1 \ xc9 \ xa5s Odznaka "

Czy to jest problem z konfiguracją? Jeśli tak, jak mogę to rozwiązać? Chciałbym obsłużyć wszystko w Unicode (myślę).

Odpowiedz

11

Wygląda na to, że twoja baza danych ma domyślną wartość latin1_swedish_ci i dlatego nie może przyjąć wszystkich znaków utf8. Musisz zmienić konfigurację tabel bazy danych MySQL, aby użyć utf8_general_ci. Dobrym blogpost na ten temat (z linkami do narzędzia) można znaleźć na stronie MySQL Performance Blog

40

Można zmienić kodowanie tabeli poprzez powłokę:

$ manage.py shell 
>>> from django.db import connection 
>>> cursor = connection.cursor() 
>>> cursor.execute('SHOW TABLES') 
>>> results=[] 
>>> for row in cursor.fetchall(): results.append(row) 
>>> for row in results: cursor.execute('ALTER TABLE %s CONVERT TO CHARACTER SET utf8 COLLATE  utf8_general_ci;' % (row[0])) 

https://mayan.readthedocs.org/en/v0.13/faq/index.html

+6

To było wspaniałe! Ale pamiętaj, że Twój zestaw znaków do bazy danych pozostanie niezmieniony, aby go zmienić również: ALTER DATABASE databasename CHARACTER SET utf8; ' – Caumons

+0

Może być również konieczne zaktualizowanie kolumn * tabeli *, nie tylko bazy danych i jej tabel . – Nick