Устаревшая база данных Django - PullRequest
       16

Устаревшая база данных Django

0 голосов
/ 15 февраля 2010

Я уверен, что этот вопрос не относится к django, но, поскольку я не смог найти решения своей проблемы в других вопросах, касающихся python и кодировок, я собираюсь задать этот вопрос. Мне нужно добавить новые функции на существующий веб-сайт, который написан на PHP с использованием MySQL в качестве бэкэнда. Я проверил базу данных и создал модели для таблиц, которые я собираюсь использовать. Однако существует проблема с существующими данными - половина из них на русском языке и (по крайней мере, мне кажется) в кодировке utf-8. Когда я показываю эти данные в админке django, они не отображаются правильно.

In [52]: p.name
Out[52]: u'\xd0\u02dc\xd0\xb3\xd0\xbe\xd1\u20ac\xd1\u0152 '

In [53]: repr(p.name)
Out[53]: "u'\\xd0\\u02dc\\xd0\\xb3\\xd0\\xbe\\xd1\\u20ac\\xd1\\u0152 '"

В админке django это выглядит так:

Игорь

Кодировки все еще немного мифичны для меня, но если я правильно понимаю этот вывод, в основном это байты utf-8 в объекте Unicode.

Вопрос: возможно ли это исправить в слое базы данных django? Я собираюсь обновить существующий контент в этих таблицах, и мне нужно, чтобы существующий интерфейс PHP был совместим как с новыми данными, так и со старыми.

Когда я добавляю эти параметры базы данных, данные отображаются в админке правильно, однако, я получаю ошибку UnicodeEncode при сохранении чего-либо. DATABASE_OPTIONS = { 'charset': 'latin1', 'use_unicode': False, } В этом случае возвращается имя:

In [2]: p2.name
Out[2]: '\xd0\x9b\xd0\xae\xd0\xa1\xd0\xaf'

Я проверил с помощью таблицы символов utf-8, и это правильные символы для данных, хранящихся в этой строке.

Ответы [ 2 ]

1 голос
/ 16 февраля 2010

На самом деле эта проблема заключалась в предыдущем наборе символов и сопоставлении базы данных - это был латиница 1, но данные были вставлены с использованием кодировки utf-8. Это было решено путем экспорта данных с использованием кодировки latin1, замены всех вхождений latin1 на utf8 и повторного импорта данных. Этот ответ показывает, как это сделать: MySQL Конвертировать данные латиницы в UTF8

1 голос
/ 16 февраля 2010

Проверьте параметры подключения mysql. Также вы можете указать DATABASE_OPTIONS:

DATABASE_OPTIONS = {
    "charset": "utf8",
    "init_command": "SET storage_engine=InnoDB",
}

Но проверьте, действительно ли это utf-8. Также обратите внимание, что соединение и кодировка сервера должны быть синхронизированы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...