web-dev-qa-db-ja.com

FreeTDSの補助文字

RHELボックスの_FreeTDS unixODBC_を介してSQL Server 2008に接続するC++アプリケーションがあります。

ただし、FreeTDS unixODBCを使用してデータベースに補助文字を挿入できません。

[FreeTDS][SQL Server]Error converting characters into server's character set. Some character(s) could not be converted

これは私のアプリケーションがヒットしているクエリです

INSERT INTO mytable (SAMPLE) VALUES(N'乕乭????????乺丕')

_== version details ==
unixODBC version - 2.3.0
freeTDS version - 0.95
_

BMPに文字を正常に挿入できます。この文字は完全にうまく挿入されています。 INSERT INTO mytable (SAMPLE) VALUES(N'乕乭乺丕')

Linux用のMicrosoft SQL Server Native Clientを使用しているときに、補助文字が適切に挿入されます。

_== freetds conf ==
[mysever.mydomain.com]
Host = mysever.mydomain.com
port = 1433
tds version = 7.3
debug flags = 0xffff
dump file = /tmp/dump.log
dump file append = no
client charset = UTF-16
use utf-16 = yes
_

unixODBC v2.3.0は、

_./configure --prefix=/usr/local/ --enable-iconv --with-iconv-char-enc=UTF8 --with-iconv-ucode-enc=UTF16LE_

FreeTDS v0.95は、

_./configure --prefix=/usr/local --sysconfdir=/usr/local/etc --with-tdsver=7.3_

4
D3XT3R

確認すること/試すこと:

  1. もう一度ドキュメントを見ると(設定ファイルと設定オプションを投稿したので)、client charsetの設定が間違っていると思います。 ODBCドライバーのビルドを構成するときに--with-iconv-char-enc=UTF-8を指定するので、UTF-8オプションを指定するときにclient charsetも使用する必要があると思いますアプリのコードのエンコードに使用されています)。

  2. FreeTDSを--enable-odbc-wide-testsで再構築してみてください。これは、問題がどこにあるかを絞り込むのに役立つ場合があります(テストで補足文字が使用されていると想定)。

  3. FreeTDSページの ビルド方法:構成と作成 の「バージョン0.95はiconvのサポートを削除しました」に関するメモを参照しましたか?これがどのような影響を与えるかはわかりませんが、他に何も役に立たない場合は、この部分を検証する必要があります(つまり、iconvのビルドが機能することおよび使用されていること)。

  4. unixODBCwebsite を見ると、メインページにはバージョン履歴があり、その履歴によると2010年4月20日にリリースされた2.3.0(ほぼ6年前)。それ以降、「ワイドキャラクター」に関連するいくつかのバグ修正と、その他の多くの修正が行われました。他の変更(おそらく#1)で当面の問題が修正されたとしても、2015年8月31日にリリースされたこのドライバーの最新バージョン2.3.4にアップグレードします。

  5. 検討する必要があるかもしれませんが、Microsoftドライバーが機能する場合は、それを使用するように切り替えるのはなぜですか?

2
Solomon Rutzky