4

FreeTDS バージョン 0.82

unixODBC バージョン 2.3.0

pyodbc バージョン 2.1.8

freetds.conf:

tds version = 7.0
client charset = UTF-8

odbc.ini で Servername を使用する (何らかの理由で、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)')

物事がどこで道に迷ったのかについて何か考えはありますか?

4

1 に答える 1