Я пытаюсь хранить данные Django на использовании SQL Server MS 2005 года:
http://code.google.com/p/django-pyodbc/ (pyodbc + FreeTDS)
Пока я храню строку, состоят из символов ASCII, все в порядке. Когда я использую unicode (напр. '\xc5\x82'), django бросает ProgrammingError на:
ProgrammingError at /admin/cli/punktrejestracji/add/
('42000', '[42000] [FreeTDS][SQL Server]The incoming tabular data stream (TDS) protocol stream is incorrect. The stream ended unexpectedly. (4002) (SQLExecDirectW)')
последний элемент трассировки:
params ('\xc5\x82',)
self
sql 'SELECT (1) AS [a] FROM [cli_punktrejestracji] WHERE [cli_punktrejestracji].[adres] = ? '
BTW, который не делает http://code.google.com/p/django-mssql/, кажется, работает в соответствии с Linux, django-mssql нужна pythoncom библиотека.Я прав?
Хорошо, решение найдено. В файле freetds.conf есть
client charset = UTF-8
, и он работает точно так же, как должен.
Мы используем Django с SQL Server 2005. Мы обнаружили ту же проблему, что и вы.
Какой драйвер ODBC вы используете? FreeTDS?
Мы попытались найти хороший драйвер ODBC для linux / unix, который бы не выдавал вышеуказанную (и другие) ошибку, когда в игру вступает юникод, - и потерпели неудачу с треском. Ни один из протестированных нами драйверов - по крайней мере, три, я могу выкопать их имена, если хотите - не имел успеха в работе со строками Unicode через django-pyodbc.
В конце концов, как это ни грустно звучит, мы решили запустить Django на сервере Windows (Apache + mod_wsgi) и использовать драйвер Microsoft SQL Native ODBC.
Когда мы это делаем, он работает отлично - с точки зрения Юникода.