3

リモートMSSQLデータベースにアクセスするためにpyodbc、ODBCとfreetdsを使用しています。最近、Centos + Python 2.4 から Ubuntu + Python 2.7 に移行しましたが、2 つの動作が異なります。私のfreetds.confは次のとおりです。

[global]
        # TDS protocol version
        tds version = 4.2

        # If you get out-of-memory errors, it may mean that your client
        # is trying to allocate a huge buffer for a TEXT field.  
        # Try setting 'text size' to a more reasonable limit 
        text size = 64512

[server]
        host = server
        port = 1333
        tds version = 8.0
        client charset = UTF-8

私のPythonコードは(簡略化)です:

import pyodbc
msConn =  pyodbc.connect('DSN=%s;UID=%s;PWD=%s' % (self.dsn, self.user, self.passwd))

msCur = msConn.cursor()
msQuery='''select ...'''
msCur.execute(msQuery % startUpdateStamp)

for row in msRows:
    print rows

上記のコードを Centos サーバー (Python 2.4 を使用) で実行すると、すべての特殊文字が utf-8 でエンコードされます。ただし、Ubuntu サーバー (python 2.7) で同じ構成で同じコードを実行すると、特殊文字は Unicode になります。あたかも構成client charset = UTF-8が完全に無視されているかのようです。

client charsetただし、サーバーが接続を許可しない代わりに、他の値に設定しようとしました。これは、クライアントの文字セット設定が通過していることを意味します。tds version = 8.0また、無駄に変更しようとしました。

私もここを見てきましたが、答えは、同じデータベースが与えられた場合、2つのシステムが2つのエンコーディングを与える理由を説明していません。

Ubuntu に UTF-8 を返すようにするにはどうすればよいですか? 私は MSSQL または ODBC に習熟していません。どんな助けでも大歓迎です。

4

0 に答える 0