BLOGTIMES
2007/11/13

RoRでSQLServerに接続する

  ruby  charset  mssqlserver 
このエントリーをはてなブックマークに追加

今回のアプリはMySQLとSQLServerに接続しなければならないのですが、Linuxから接続するのとWindowsから接続するのでは大違いで、またもやハマってしまいました。最近、こんなのばっかりですね。

RoR Wiki 翻訳 Wiki - HowtoConnectToMicrosoftSQLServer

これに従ってとりあえず接続はできたのですが、RoRの文字コードはUTFなのに、SQLServerからの文字列はSJISになっているらしく、その部分だけ文字化けしてしまいました。ちなみに本番でちゃんと動いているのは、環境がLinuxなのでODBC接続するために使っているFreeTDSが文字コードを変換してくれているようです。ところが、WindowsのSQLServerのODBCドライバには文字コード変換なんていうオプションはないので困りました。

検索エンジンで色々さがしてみると、ちょっと古いエントリだけど下記の人も同じところで困ったみたい。

2006-05-28 - A.R.N [日記]

[さらに追記] なぜか、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:
    お気軽にどうぞ。トラックバック前にポリシーをお読みください。[policy]
    このエントリへのTrackbackにはこのURLが必要です→https://blog.cles.jp/item/2277
    Trackbacks
    このエントリにトラックバックはありません
    Comments
    愛のあるツッコミをお気軽にどうぞ。[policy]
    古いエントリについてはコメント制御しているため、即時に反映されないことがあります。
    コメントはありません
    Comments Form

    コメントは承認後の表示となります。
    OpenIDでログインすると、即時に公開されます。

    OpenID を使ってログインすることができます。

    Identity URL: Yahoo! JAPAN IDでログイン