Как установить кодировку для столбцов char столбцов в django?

У меня есть проект, написанный на Django. Все поля, которые должны хранить некоторые строки, должны быть в UTF-8, однако, когда я запускаю

manage.py syncdb

все соответствующие столбцы создаются с помощью набора символов cp1252 (откуда он это взял - я понятия не имею), и я должен вручную обновить каждый столбец...

Есть ли способ сказать Django для создания всех этих столбцов с кодировкой UTF-8?

Кстати, я использую MySQL.

3 ответа

Решение

Django не указывает кодировку и сопоставление в CREATE TABLE заявления. Все определяется базой данных charset. дела ALTER DATABASE ... CHARACTER SET utf8 COLLATE utf8_general_ci перед запуском syncdb должно помочь

Для связи, вопросы Django SET NAMES utf8 автоматически, поэтому вам не нужно беспокоиться о настройках кодировки соединения по умолчанию.

Бэкэнды базы данных Django автоматически обрабатывают строки Unicode в соответствующую кодировку и общаются с базой данных. Вам не нужно сообщать Django, какую кодировку использует ваша база данных. Он хорошо справляется с этим, используя кодировку вашей базы данных.

Я не вижу способа, которым вы можете сказать django создать столбец, используя какую-то определенную кодировку. Как мне кажется, абсолютно какая-то предыдущая конфигурация MySQL затронула вас. И несмотря на то, что вы делаете это вручную для всех столбцов, используйте их.

CREATE DATABASE db_name
    [[DEFAULT] CHARACTER SET charset_name]
    [[DEFAULT] COLLATE collation_name]

ALTER DATABASE db_name
    [[DEFAULT] CHARACTER SET charset_name]
    [[DEFAULT] COLLATE collation_name]

Какова ваша кодировка MySQL?

Например, попробуйте следующее из командной строки:

 mysqld --verbose --help | grep character-set

Если он не выводит utf8, вам нужно установить вывод в my.cnf:

[mysqld]
character-set-server=utf8
default-collation=utf8_unicode_ci

[client]
default-character-set=utf8

Эта страница содержит дополнительную информацию:

Другие вопросы по тегам