Как установить кодировку для столбцов 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
Эта страница содержит дополнительную информацию: