2010-02-03 3 views
4

Я пытаюсь сохранить данные Django на MS SQL Server 2005 с помощью:Джанго <-> SQL Server 2005, проблема кодировки текста

http://code.google.com/p/django-pyodbc/ (pyodbc + FreeTDS)

Пока я храню строку состоят из символов ASCII, все в порядке. Когда я использую Юникода (. Ех '\ xc5 \ X82'), Джанго бросает 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 <django.db.backends.sql_server.pyodbc.base.CursorWrapper object at 0x92ef8ec> 
sql 'SELECT (1) AS [a] FROM [cli_punktrejestracji] WHERE [cli_punktrejestracji].[adres] = ? ' 

BTW http://code.google.com/p/django-mssql/ не кажется, работа под Linux, django-mssql нуждается в библиотеке pythoncom. Я прав?

ответ

1

ОК, решение было найдено. В файле freetds.conf есть

client charset = UTF-8 

и он работает точно так, как должен.

+0

Мы попытались использовать это, и хотя он исправил некоторые сообщения об ошибках, он не исправил их все. Надеюсь, он сделает это за вас. – cethegeek

+0

Так же я :-) Если нет, нам может потребоваться изменить технологию из django, а также в другую. – gruszczy

+0

Я не слышу вас от вас - может быть, еще один комментарий здесь - если с этим все будет хорошо. Наряду с выпуском Django и django-pyodbc у вас был успех с ... :-) – cethegeek

2

Мы используем Django с SQL Server 2005. Мы обнаружили ту же проблему, что и вы.

Какой драйвер ODBC вы используете? FreeTDS?

Мы попытались найти хороший драйвер ODBC для использования linux/unix, который не будет вызывать ошибку выше (и другие), когда unicode войдет в игру - и потерпел неудачу. Ни один из драйверов, которые мы тестировали - по крайней мере три, я могу выкопать имена, если вы захотите, - имел успех в работе с unicode-строками через django-pyodbc.

Что мы в итоге сделали, как могло бы показаться, было решение запустить Django на сервере Windows (Apache + mod_wsgi) и использовать драйвер SQL Native ODBC от Microsoft.

Он работает просто отлично - unicode wise - когда мы это делаем.

0

в дополнение к принятым ответ, можно исправить эту ошибку dirrectly в settings.py:

DATABASES = { 
    'default': { 
     'ENGINE': 'sql_server.pyodbc', 
     'NAME': 'MyTableName', 
     'HOST': r'server.lan\server_instance_name', 
     'USER': 'sa', 
     'PASSWORD': '[email protected]', 
     'OPTIONS': { 
      'host_is_server': True, 
      "extra_params":"TDS_Version=8.0;ClientCharset=UTF-8", 
      "autocommit": True, 
      "driver_needs_utf8":True, 
     }, 

    } 
} 

взгляните на extra_params

это не полагаться на глобальный freetds.conf, так что лучше