4

リモートホストのUbuntu12.04LTSおよびMSSQL2008のデータベースバックエンドとしてdjango-pyodbcを使用しています。キリル文字を返す以外はうまく機能します。それらの代わりに疑問符が表示されます-'?'。この問題の原因を調査し始めました。

私が理解している限り、MSSQL-djangoチェーンは次のように見えます。

MSSQL <-> FreeTDS <-> unixODBC <-> pyodbc <-> django-pyodbc

だから私はFreeTDSから始めました。tsqlでクエリを実行すると、うまく機能し、キリル文字を含むすべてのシンボルを確認できます。

次はisqlでした-私が理解している限り、FreeTDS<->unixODBCペアをテストできます。そして、そこで私は適切なデータを取得できませんでした。実際、キリル文字を含むisql列でクエリを実行すると、空であるか、表示されていない記号で構成されています。FreeTDS<->unixODBC間の通信に問題があると思います。この問題の原因は何ですか?ところで、私もiusqlを試しました-何も変わっていません。

MSSQL照合はCyrillic_General_CI_ASです。

freetds.confの内容:

[global]
tds version = 4.2
dump file = /tmp/freetds.log
debug flags = 0xffff
timeout = 10
connect timeout = 10
client charset = UTF-8
text size = 64512

[egServer50]
host = symachine.domain.com
port = 5000
tds version = 5.0

[egServer70]
host = ntmachine.domain.com
port = 1433
tds version = 7.0

[rfxdigest]
host = mssql-iis-1
port = 1433
tds version = 8.0
client charset = UTF-8

odbc.iniの内容:

[RFX]
Description = Rfx digest server
Driver = FreeTDS
Database = RFXDB
Servername = rfxdigest
TDS_Version = 8.0 

編集115.08.12

pyodbcを使用するPythonでは、「?」キリル文字の代わりに-私は両方のPythonバージョン(UCS2とUCS4)を試しました。

4

3 に答える 3

1

あなたは?印刷できない文字の場合は返されます

以下のコマンドを実行して、PythonセットアップがサポートするUnicodeを確認してください:-

python -c "import sys;print(sys.maxunicode<66000)and'UCS2'or'UCS4'"

次に、Pythonと同じ文字セットを使用するようにFreeTDSを設定する必要があります。FreeTDSがPythonで使用しているUnicode形式をサポートしていない場合は、PythonとFreeTDSの両方を変更する必要があります。

UCS2を有効にしてソースからPythonを再構築するには、次のようなことを行う必要があります:-

$ ./configure --enable-unicode=ucs2
$ make
$ sudo make install
于 2012-08-09T08:12:14.847 に答える
0

わかりました、私はこのすべてのモジュールチェーンを機能させました:

MSSQL <-> FreeTDS <-> unixODBC <-> pyodbc <-> django-pyodbc

django設定のDATABASESオプションに「unicode_results」:Trueを追加しました。

DATABASES = {
'default': {
    'ENGINE': 'sql_server.pyodbc', # Add 'postgresql_psycopg2', 'postgresql', 'mysql', 'sqlite3' or 'oracle'.
    'NAME': 'name',                      # Or path to database file if using sqlite3.
    'USER': 'user',                      # Not used with sqlite3.
    'PASSWORD': 'pwd',                  # Not used with sqlite3.
    'HOST': 'server-name',                      # Set to empty string for localhost. Not used with sqlite3.
    'PORT': 'port',                      # Set to empty string for default. Not used with sqlite3.
    'OPTIONS': {
            'unicode_results':True,
            'driver': 'FreeTDS',
            'host_is_server': True,
            'extra_params': 'TDS_VERSION=8.0'
    }

しかし、pyodbcとisqlはまだ正しく機能しません。おそらく、他のUnicode固有のパラメーターを見逃している可能性があります。後で、odbcとpyodbcがこのunicode_resultsパラメーターをどのように使用するかを確認します。とにかく、サイトはキリル文字のシンボルを表示できるようになりました。

于 2012-08-15T10:01:52.147 に答える
0

私は一週間にわたってキリル文字の問題と戦っていました。異なる解決策を見つけました。Linux用のMicrosoftmssqlドライバーを使用しています。サポートされているディストリビューション(Suse、redhat)以外にインストールする方法は次のとおりです。https ://groups.google.com/forum/#!topic / shiny-ディスカッション/AyFthz3UGwg

このドライバーは通常のutf-8を返し、すべてがパッケージから機能します。

于 2013-10-22T10:58:29.717 に答える