2011-08-16 10 views
5

¿Cuál es la razón del siguiente error? cuando intento para filtrar con:django python error de clasificación

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

donde la ubicación se define como:

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

me sale el siguiente error al unDiccionario [ 'dirección'] contiene una cadena con un carácter no alfanumérico (por Kīhei ejemplo):

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 '='") 

Respuesta

6

alterar la base de datos en MySQL, así:

ALTER TABLE foo CONVERT TO CHARACTER SET utf8 COLLATE utf8_general_ci; 

Al crear una nueva base de datos, recuerde que debe crear con la derecha cotejar ajustes:

CREATE DATABASE foo CHARACTER SET utf8 COLLATE utf8_general_ci; 

Más discusión here.

+0

Por lo tanto, ¿recomienda dejar caer la base de datos, incluidas todas sus tablas y posiblemente los datos de producción, para cambiar la intercalación? ¿Qué hay de cambiar eso a las declaraciones ALTER en su lugar? – Jordan

+0

I _swear_ que cuando encontré este problema todos los documentos dijeron que necesitaba DROP y CREATE. Entonces investigué, y tienes razón. Publicación editada –

+0

me queda bien :) – Jordan

0

Python está utilizando cadenas Unicode, y su base de datos no lo es. Cambie la recopilación de la base de datos para usar utf8 y debería estar bien.