4

FreeTDS version 0.82

unixODBC version 2.3.0

pyodbc version 2.1.8

freetds.conf:

tds version = 7.0
client charset = UTF-8

using Servername in the odbc.ini (which for some crazed reason made a difference in getting unixODBC to recognize the client charset in freetds)

I'm able to pull utf8 data correctly and can update with the string inline ie:

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

But

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

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

Fails with:

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

If I add:

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

I get the following error:

pyodbc.ProgrammingError: ('42000', '[42000] [FreeTDS][SQL Server]The incoming tabular data stream (TDS) protocol stream is incorrect. The stream ended unexpectedly. (4002) (SQLExecDirectW)')

Any ideas as to where things have gone astray?

Sean Vieira
  • 155,703
  • 32
  • 311
  • 293
Michael
  • 41
  • 2

1 Answers1

1

Unicode support was reworked in pyodbc 3.0.x. Try testing with the latest source (3.0.2-beta02, etc.)