Подтвердить что ты не робот

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

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

manage.py syncdb

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

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

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

4b9b3361

Ответ 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

На этой странице есть дополнительная информация: