mysql
  • django
  • django-models
  • mysql-error-1267
  • 2009-07-02 8 views 20 likes 
    20

    que estoy viendocarácter Django conjunto con MySQL WEIRDNESS

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

    Parece que algunos de mis variables son cadenas UTF8

    'nombre': 'p \ XC7 \ x9d \ xca \ x87 \ XC9 \ x9f \ xc4 \ xb1 \ xc9 \ xa5s Insignia '

    ¿Este es un problema de configuración? Si es así, ¿cómo puedo resolverlo? Me gustaría manejar todo en Unicode (creo).

    Respuesta

    11

    Parece que su base de datos está predeterminada en latin1_swedish_ci, y por lo tanto no puede aceptar todos los caracteres utf8. Necesita cambiar la configuración de las tablas de la base de datos MySQL para usar utf8_general_ci. Una buena entrada de blog acerca de esto (con enlaces a una herramienta) se puede encontrar en MySQL Performance Blog

    40

    Puede cambiar la codificación tabla a través de la cáscara:

    $ 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

    Esto funcionó muy bien! Pero tenga en cuenta que su conjunto de caracteres de la base de datos se mantendrá como estaba, para modificarlo también ejecute: 'ALTER DATABASE databasename CHARACTER SET utf8;' – Caumons

    +0

    También es posible que necesite actualizar las * columnas * de cada tabla, no solo la base de datos y sus tablas . – Nick

    Cuestiones relacionadas