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

    Je voiscaractère django ensemble avec MySQL bizarreries

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

    Il ressemble à certaines de mes variables sont des chaînes UTF8

    'name': « p \ XC7 \ x9d \ xca \ x87 \ XC9 \ x9f \ xc4 \ xb1 \ xc9 \ xa5s Badge '

    Est-ce un problème de configuration? Si oui, comment puis-je le résoudre? Je voudrais gérer tout en Unicode (je pense).

    Répondre

    11

    Il semble que votre base de données soit par défaut latin1_swedish_ci et ne puisse donc pas accepter tous les caractères utf8. Vous devez changer la configuration des tables de la base de données MySQL pour utiliser utf8_general_ci. Un bon blogpost sur ce (avec des liens vers un outil) se trouve à MySQL Performance Blog

    40

    Vous pouvez modifier le codage de table via le shell:

    $ 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

    Ce fonctionnait très bien! Mais gardez à l'esprit que votre charset de base de données restera tel quel, pour le modifier, exécutez également: 'ALTER DATABASE databasename CHARACTER SET utf8;' – Caumons

    +0

    Vous pouvez également avoir besoin de mettre à jour les * colonnes * de chaque table, pas seulement la base de données et ses tables . – Nick

    Questions connexes