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
_
確認すること/試すこと:
もう一度ドキュメントを見ると(設定ファイルと設定オプションを投稿したので)、client charset
の設定が間違っていると思います。 ODBCドライバーのビルドを構成するときに--with-iconv-char-enc=UTF-8
を指定するので、UTF-8
オプションを指定するときにclient charset
も使用する必要があると思いますアプリのコードのエンコードに使用されています)。
FreeTDSを--enable-odbc-wide-tests
で再構築してみてください。これは、問題がどこにあるかを絞り込むのに役立つ場合があります(テストで補足文字が使用されていると想定)。
FreeTDSページの ビルド方法:構成と作成 の「バージョン0.95はiconvのサポートを削除しました」に関するメモを参照しましたか?これがどのような影響を与えるかはわかりませんが、他に何も役に立たない場合は、この部分を検証する必要があります(つまり、iconv
のビルドが機能することおよび使用されていること)。
unixODBC
website を見ると、メインページにはバージョン履歴があり、その履歴によると2010年4月20日にリリースされた2.3.0(ほぼ6年前)。それ以降、「ワイドキャラクター」に関連するいくつかのバグ修正と、その他の多くの修正が行われました。他の変更(おそらく#1)で当面の問題が修正されたとしても、2015年8月31日にリリースされたこのドライバーの最新バージョン2.3.4にアップグレードします。
検討する必要があるかもしれませんが、Microsoftドライバーが機能する場合は、それを使用するように切り替えるのはなぜですか?