2008に接続してnvarcharのデータが文字化けというか「?」になることに気がついた。TclODBCはunicodeの文字列型には対応していなかったらしい・・・。ODBC2.0の仕様のままのようだ。ServerのODBCドライバはODBC3.0以上なので、TclODBCにその型さえ登録してしまえば、Tclの文字列の内部表現のUTF-8に完全にデータの損失なしにやり取りできるはず。やっつけ仕事で修正パッチを書いた。Server接続以外のことは考えずに書いたので、他の環境(Unixとか)でうまくコンパイルできないかもしれない。tclodbc_validateStrToNumFunction();このパッチでは、次の点を改良した。UNICODE文字列型に対応した。SQL文は全てunicode文字列として扱うことにした。(Tclの内部表現であるUTF-8をUTF-16にしてそのまま渡す。encodingで設定したエンコーディングから変換して取得/設定する。encodingのエンコーディング自動変換が利くのは取得するデータ、ステートメントのパラメータの設定のみ。ステートメントのSQL文そのものはTclの文字列(UTF-8)をそのままUTF-16にして渡すので、エンコーディングは変換されない(unicodeとして扱う)。encodingの設定したものに変換していたが、こんなことをする必要があるのかと。WindowsでのODBCの関数はANSI系とUNICODE系の2種類あるのだが、ひょっとしたらUNIXで使うODBCドライバマネージャ絡みでこうしないといけないのかもしれない。