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

    sto vedendocarattere django set con MySQL stranezza

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

    Sembra che alcuni dei miei variabili sono stringhe UTF8

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

    Si tratta di un problema di configurazione? Se è così, come posso risolverlo? Mi piacerebbe gestire tutto in Unicode (credo).

    risposta

    11

    Sembra che il database sia impostato come predefinito su latin1_swedish_ci e pertanto non può accettare tutti i caratteri utf8. È necessario modificare la configurazione delle tabelle del database MySQL per utilizzare utf8_general_ci. Un buon blogpost su questo (con link a uno strumento) sono disponibili all'indirizzo MySQL Performance Blog

    40

    È possibile modificare la codifica tabella tramite la 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

    questo ha funzionato grande! Ma tieni presente che il tuo set di caratteri del database rimarrà come era, per cambiarlo eseguirà anche: 'ALTER DATABASE databasename CHARACTER SET utf8;' – Caumons

    +0

    Potrebbe anche essere necessario aggiornare anche * colonne * di ogni tabella, non solo il database e le sue tabelle . – Nick

    Problemi correlati