Как установить кодировку столбцов char в django?
У меня есть проект, написанный в Django. Все поля, которые должны хранить некоторые строки, должны быть в UTF-8, однако, когда я запускаю
manage.py syncdb
все соответствующие столбцы создаются с набором символов cp1252 (откуда он это понял - я понятия не имею), и мне нужно вручную обновлять каждый столбец...
Есть ли способ сообщить Django о создании всех этих столбцов с кодировкой UTF-8?
Кстати, я использую MySQL.
Ответы
Ответ 1
Django не указывает кодировку и сортировку в операторах CREATE TABLE
. Все определяется кодировкой базы данных. Выполнение ALTER DATABASE ... CHARACTER SET utf8 COLLATE utf8_general_ci
перед запуском syncdb
должно помочь.
Для подключения Django выдает SET NAMES utf8
автоматически, поэтому вам не нужно беспокоиться о настройках кодировки по умолчанию.
Ответ 2
Базы базы данных Djangos автоматически обрабатывают строки 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]
Ответ 3
Какова ваша кодировка 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
На этой странице есть дополнительная информация: