Ошибка связывания параметров Pyodbc utf-8 с FreeTDS и unixODBC - PullRequest
4 голосов
/ 18 мая 2011

FreeTDS версия 0.82

unixODBC версия 2.3.0

pyodbc версия 2.1.8

freetds.conf:

tds version = 7.0
client charset = UTF-8

с использованием имени сервера вodbc.ini (который по какой-то сумасшедшей причине привел к тому, что unixODBC распознал клиентскую кодировку в freetds)

Я могу правильно извлекать данные utf8 и обновлять их со строкой, т. е.

UPDATE table
SET col = N'私はトカイ大好き'
WHERE id = 182333369

Но

text = u'私はトカイ大好き'

cursor.execute("""
    UPDATE table
    SET column = ?
    WHERE id = 182333369 
""", text)

Сбой:

pyodbc.Error: ('HY004', '[HY004] [FreeTDS][SQL Server]
Invalid data type (0) (SQLBindParameter)')

Если я добавлю:

text = text.encode('utf-8')

, я получаю следующую ошибку:

pyodbc.ProgrammingError: ('42000', '[42000] [FreeTDS] [SQL Server] Неверный поток протокола входящего потока табличных данных (TDS). Поток неожиданно завершился. (4002) (SQLExecDirectW)')

Есть какие-нибудь идеи относительно того, куда все сбилось?

1 Ответ

1 голос
/ 19 декабря 2011

Поддержка Unicode была переработана в pyodbc 3.0.x. Попробуйте протестировать с последним источником (3.0.2-бета02 и т. Д.)

...