2

pyODBCを使用してMSSQL2005Expressサーバーと通信しています。データを保存しようとしているテーブルは、nvarchar列で構成されています。

query = u"INSERT INTO tblPersons (name, birthday, gender) VALUES('"
query  = query  + name + u"', '"
query  = query  + birthday + u"', '"
query  = query  + gender + u"')"
cur.execute(query)

変数name、birthrday、およびgendeはExcelファイルから読み取られ、Unicode文字列です。クエリを実行し、SQL Server Management Studioでテーブルを確認するか、挿入されたばかりのデータをフェッチするクエリを実行すると、英語以外の言語で書き込まれたすべてのデータが疑問符に変わります。英語で書かれたデータは保存され、正しい方法で表に表示されます。CHARSET=UTF16接続文字列に追加しようとしましたが、うまくいきませんでした。これは正常に機能するものを使用できますUTF-8が、動作規則として、DBに保存されているすべてのデータがである必要がありますUTF16

ありがとう!

4

2 に答える 2

2

これは、pyodbcが使用しているodbcドライバーに関連するものである可能性があります。それがユニコードをサポートしていない場合は、おそらく自分でパラメータをエンコードする必要があります。name.encode('utf-16')

また、SQL文字列を自分で連結するのではなく、実際にはクエリパラメータを使用する必要があります。次に例を示します。

query = "INSERT INTO tblPersons (name, birthday, gender) VALUES (?, ?, ?)"
cur.execute(query, [name, birthday, gender])

これがUnicodeの問題に役立つとは思えませんが、はるかに安全で簡単です。

(そして別の無関係なヒント:単純なクエリのためだけに使用し、オブジェクトリレーショナルマッピングのものを使用しない場合でも、sqlalchemyを介してpyodbcを使用する方がはるかに優れています)

于 2010-06-10T21:06:52.200 に答える
0

私はとても愚かです..問題はサーバーにありました(照合を必要な言語に変更する必要がありました)

ありがとう!

于 2010-06-12T14:58:01.203 に答える