私はAzureでホストされているSQLサーバデータベースを持っています。私はスマート引用符( '"テスト"')でデータベースに文字列を入れました。私は私のMac(MacOSの10.11.6やPython 3.4.4、2.1.3 pymssql)にこのクエリを実行すると、私は、文字列を取り戻すpymssqlはAzure/Windows上でMacと比べて異なる文字セットを返します
import pymssql
import json
conn = pymssql.connect(
server='coconut.database.windows.net',
user='[email protected]',
password='********',
database='coconut',
charset='UTF-8',
)
sql = """
SELECT * FROM messages WHERE id = '548a72cc-f584-7e21-2725-fe4dd594982f'
"""
cursor = conn.cursor()
cursor.execute(sql)
row = cursor.fetchone()
json.dumps(row[3])
:私はそれに接続して簡単なクエリを実行することができます
"\u201ctest\u201d"
これはスマート引用符として正しく解釈され、正しく表示されます。
私はAzureのWebデプロイメント(Pythonの3.4、Azureのアプリケーションサービス)上でこのクエリを実行すると、私は戻って、同じ文字列で異なる(誤った)エンコーディングを取得:
"\u0093test\u0094"
私は 'と文字セットを指定UTF-8 'をpymssql接続に追加します。なぜWindows/Azure環境が別の文字セットを返すのですか?
(注:私はAzureの私のプロジェクトレポのホイールハウスにあらかじめ構築されたバイナリpymssql-2.1.3-cp34-none-win32.whlを入れました。これはpymssqlのプリビルドバイナリpymssqlと同じです-2.1.3-cp34-cp34m-win32.whl for PyPIのみpipをインストールするように 'cp34m'を 'none'に変更しなければなりませんでした)
興味深い。私はSQL_Latin1_General_CP1_CI_ASのデフォルト照合を使用しています。私が "sys"を実行すると、私のMacでは "stdin.encoding"を "utf-8"に、Azureで "cp1252"を取得します。デフォルトのpython文字エンコーディングが使用されているUnicode文字を判別しているのだろうかと思います。 Pythonを起動する前にAzureで "65001"を入力してください。 – Wheat