2011-07-13 11 views
7

Quiero configurar mi sitio Django para usar UTF-8 para MySQL de una manera infalible, independientemente de si la instalación MySQL usa UTF-8 como su valor predeterminado. Además de crear las tablas con codificación UTF-8, añadí lo siguiente para mi inicialización base de datos en settings.py para asegurar la conexión también está utilizando UTF-8:Configuración del sitio Django/MySQL para usar UTF-8

'OPTIONS': { 'init_command': 'SET storage_engine=INNODB; SET names "utf8"' } 

Esto resulta en un error:

_mysql_exceptions.ProgrammingError: (2014, "Commands out of sync; you can't run this command now") 

¿Cuál es la forma correcta de hacerlo? ¿Hay algún otro lugar donde se DEBEN ejecutar SET NAMES?

Respuesta

10

Solo hay que usar SET sólo una vez y añadiendo otros comandos como:

'SET storage_engine=INNODB,character_set_connection=utf8,collation_connection=utf8_unicode_ci' 
+0

enlace no funciona – nkvnkv

10

Todo lo que tenía que hacer era poner esto en settings.py:

'OPTIONS': { 'init_command': 'SET storage_engine=INNODB' } 

Entonces creó la base de datos a mí mismo en MySQL con:

CREATE DATABASE my_database CHARACTER SET utf8; 

seguido por todo el CREATE USER y GRANT llamadas.

Después de eso, ./manage.py syncdb y ./manage.py migrate (ya que uso South) terminaron todo.

Ha funcionado bien hasta el momento. No tuvo que cambiar ningún archivo de configuración de MySQL, tampoco. (El administrador de sistemas quería mantener MySQL utilizando el juego de caracteres latin1 por defecto para los demás usuarios.)

+0

Bueno para mí, lo cambia sobre db crear. –

Cuestiones relacionadas