Настройка сайта Django / MySQL для использования UTF-8 - PullRequest
9 голосов
/ 13 июля 2011

Я хочу настроить мой сайт Django на использование UTF-8 для MySQL надежным способом, независимо от того, использует ли установка MySQL UTF-8 по умолчанию.В дополнение к созданию таблиц с кодировкой UTF-8, я добавил следующее к моей инициализации базы данных в settings.py, чтобы убедиться, что соединение также использует utf-8:

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

Это приводит к ошибке:

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

Как правильно сделать это?Есть ли другое место, где должны быть выполнены SET NAMES?

Ответы [ 3 ]

16 голосов
/ 15 июля 2011

Вам нужно только один раз использовать SET и добавлять другие команды как:

'SET storage_engine=INNODB,character_set_connection=utf8,collation_connection=utf8_unicode_ci'
10 голосов
/ 15 июля 2011

Все, что мне нужно было сделать, это поместить в settings.py:

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

Затем я сам создал базу данных в MySQL с помощью:

CREATE DATABASE my_database CHARACTER SET utf8;

, за которыми следуют все звонки CREATE USER и GRANT.

После этого ./manage.py syncdb и ./manage.py migrate (так как я использую Юг) завершили все.

Пока все работает нормально. Не нужно было менять какие-либо конфигурационные файлы MySQL. (Системный администратор хотел, чтобы MySQL по умолчанию использовал кодировку latin1 для других пользователей.)

3 голосов
/ 06 марта 2015

Проверка: http://blog.ionelmc.ro/2014/12/28/terrible-choices-mysql/

  'SET '
                'storage_engine=INNODB,'
                'character_set_connection=utf8,'
                'collation_connection=utf8_bin,'
                'SESSION TRANSACTION ISOLATION LEVEL READ COMMITTED',
         }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...