- blogs:
- cles::blog

RoRでSQLServerに接続する



今回のアプリはMySQLとSQLServerに接続しなければならないのですが、Linuxから接続するのとWindowsから接続するのでは大違いで、またもやハマってしまいました。最近、こんなのばっかりですね。
RoR Wiki 翻訳 Wiki - HowtoConnectToMicrosoftSQLServer
これに従ってとりあえず接続はできたのですが、RoRの文字コードはUTFなのに、SQLServerからの文字列はSJISになっているらしく、その部分だけ文字化けしてしまいました。ちなみに本番でちゃんと動いているのは、環境がLinuxなのでODBC接続するために使っているFreeTDSが文字コードを変換してくれているようです。ところが、WindowsのSQLServerのODBCドライバには文字コード変換なんていうオプションはないので困りました。
検索エンジンで色々さがしてみると、ちょっと古いエントリだけど下記の人も同じところで困ったみたい。
[さらに追記] なぜか、SQL Serverから送られてくる文字列がSHIFT_JISだ。DBIまでいじらないとどうにもならなかったりするのだろうか。困った。
[2006/06/12 追記] よくよくソースを追ってみると、database.ymlに書いてあるproviderが無視されている。sqlserver_adapter.rbの該当部分に修正を加え、WIN32OLE.codepage = WIN32OLE::CP_UTF8 を指定するとなんとかなりそうだが、時間が足りず未検証。
仕方が無いので、WIN32OLE.codepage = WIN32OLE::CP_UTF8をキーワードに検索してみると下記の中国語のページがヒット。
如何在rails中正确使用MS Sql Server 2000做为数据库服务器 - rails - Ruby - JavaEye论坛
4.在environment.rb添加下面代码
require 'win32ole' WIN32OLE.codepage = WIN32OLE::CP_UTF8
中国語は良くわかりませんが同じような問題のようなので、試しにenvironment.rbに該当のコードをを追加してみるとコレがビンゴ。ということで、アプリはやっと動くようになりました。やっと動かしながら色々調べたりすることができそうです。
このエントリへのTrackbackにはこのURLが必要です→https://blog.cles.jp/item/2277
古いエントリについてはコメント制御しているため、即時に反映されないことがあります。
コメントは承認後の表示となります。
OpenIDでログインすると、即時に公開されます。
OpenID を使ってログインすることができます。
2 . 福岡銀がデマの投稿者への刑事告訴を検討中(111887)
3 . 年次の人間ドックへ(111401)
4 . 2023 年分の確定申告完了!(1つめ)(110991)
5 . 三菱鉛筆がラミーを買収(110879)