2010-02-03 56 views
4

我試圖使用存儲MS SQL Server 2005上的Django數據:Django的<-> SQL Server 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 <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 2010-02-03 18:30:59

+0

我也是這樣:-)如果沒有,我們可能需要將技術從django改爲其他。 – gruszczy 2010-02-03 18:39:49

+0

我不介意從你那裏聽到 - 也許這裏有另一個評論 - 如果事情成功的話,這個。除了Django和Django-pyodbc的發佈外,你還可以成功地使用... :-) – cethegeek 2010-02-03 18:44:17

2

我們在Django和SQL Server 2005中使用。我們發現了相同的問題。

您使用的是什麼ODBC驅動程序? freetds的?

我們試圖找到一個好的ODBC驅動程序,用於linux/unix,當unicode啓動時不會拋出上面的錯誤(和其他),並且失敗。我們測試的驅動程序都沒有 - 至少有三個,如果你願意,我可以挖掘它們的名字 - 通過django-pyodbc處理unicode字符串有任何成功。

我們最終做的,聽起來很可悲,就是決定在Windows服務器上運行Django(Apache + mod_wsgi)並使用Microsoft的SQL Native ODBC驅動程序。

它工作得很好 - unicode明智 - 當我們這樣做。

0

除了接受響應,有可能在settings.py dirrectly修復此錯誤:

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文件,所以它更好