リモート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 に習熟していません。どんな助けでも大歓迎です。