Пару дней назад начал изучать Питон и Джанго.
Пробую выполнить обучалку отсюда
http://www.djangoproject.com/documentation/tutorial01/ (polls)
Создал модели и базу, сделал такой тестовый скрипт создающий объект:
# -*- coding: utf-8 -*-
from mysite.polls.models import Poll
import datetime
p = Poll(question="Как дела?", pub_date=datetime.datetime.now())
p.save()
Сначала я делаю всё в utf-8: сам скрипт, mysql база, DEFAULT_CHARSET.
Работает, полёт нормальный!
Теперь меняю всё это на cp1251.
Traceback (most recent call last):
File "test.py", line 7, in <module>
p.save()
File "/usr/lib/python2.5/django/db/models/base.py", line 238, in save
','.join(placeholders)), db_values)
File "/usr/lib/python2.5/django/db/backends/util.py", line 12, in execute
return self.cursor.execute(sql, params)
File "/usr/lib/python2.5/site-packages/MySQL_python-1.2.2-py2.5-linux-i686.egg/MySQLdb/cursors.py", line 168, in execute
File "/usr/lib/python2.5/site-packages/MySQL_python-1.2.2-py2.5-linux-i686.egg/MySQLdb/cursors.py", line 82, in _warning_check
File "/usr/lib/python2.5/warnings.py", line 62, in warn
globals)
File "/usr/lib/python2.5/warnings.py", line 102, in warn_explicit
raise message
_mysql_exceptions.Warning: Incorrect string value: '\xCA\xE0\xEA \xE4\xE5...' for column 'question' at row 1
Как сие понимать? Это была джанга 0.96. Транк из svn выдает еще более суровую ошибку, что он эту строку не может преобразовать в юникод.
Более того в документации транку есть такой документ
http://www.djangoproject.com/documentation/unicode/ в котором открытым текстом говорится что нельзя использовать какие-то другие кодировки кроме utf-8 внутри Джанго.
То есть получается что если у меня сайт в cp1251, то на каждом запросе будет выполнятся преобразование кодировок cp1251 => utf-8 и utf-8 => cp1251? И это нормально? Как-то мне это не нравится такой подход с точки зрения быстродействия и вообще…