0

編集: 問題の理解を深めるために、この質問を完全に作り直しました

DB内のすべてのテーブル名をフェッチするために使用されるPYODBC+MYSQLコマンド

cursor.execute("select table_name from information_schema.tables where
             table_schema='mydbname'")

結果は、各文字列で1文字おきに省略されたUnicode文字列のリストです。

DBはutf8ですが、私のinformation_schemaテーブル名は純粋なASCIIです。latin1である私のDBからの読み取りは正常に機能します。実行set character_set_* = 'utf8'しても役に立ちません。

C ++ /ODBCテストプログラムから同じクエリを実行すると、正常に機能します。

pyodbc文字エンコードに対してどのように機能するか知っていますか?utf8 DBを使用する場合、どのエンコーディングを想定していますか?

LinuxでUnixODBC、python 2.6.4、pyodbc2.1.7を使用しています

4

1 に答える 1

2

ODBC仕様では、ASCIIとUCS-2の2つのエンコーディングのみが許可されています。データベースが含まれているものをこれら2つのうちの1つに変換するのは、ODBCドライバーの仕事ですが、ほとんどのODBCドライバーの作成者は、それがどのように機能するかを理解していません。

クエリが実行されると、pyodbcはエンコーディングを要求しません。クエリを実行してから、各列のデータ型をドライバーに要求します。データ型がUnicodeの場合、バッファを読み取り、UCS2として扱います。データ型がASCIIの場合、バッファを読み取り、ASCIIとして扱います。

ストレージ形式は無関係であると想定されています。

于 2011-03-04T15:06:46.657 に答える