SQL Serverを使う
HowtoConnectToMicrosoftSQLServerを参考にやってみました。
まず、以下のコマンドで、activerecord-sqlserver-adapterをインストールします。--sourceオプションでのURLの指定は必須です。
gem install activerecord-sqlserver-adapter --source=http://gems.rubyonrails.org
次にSQL Serverに接続するためのRuby-DBIライブラリをインストールします。こちらからダウンロードして、"lib/dbd/ADO.rb"を、Rubyをインストールしたディレクトリの"lib/ruby/site_ruby/1.8/DBD/ADO/"にコピーします。
これだけでOKなはずなのですが、以下のコマンドでDBMSを指定してアプリケーションを作成しようとすると、sqlserverが認識されていないようでしたので、
rails -d sqlserver testproj
とりあえず標準(SQLite3)で作成して、database.yamlを以下のように変更しました(development以外も同様)。
development: adapter: sqlserver database: testproj_development host: localhost username: sa # 接続アカウント(今回は混合認証を使用) password: pass # 接続パスワード
SQL Serverの方で指定したデータベースを作成し、マイグレーションを実行したところ、とりあえず動作はしたのですが、以下のような問題がありました。
- 全角文字を含むデータをインサートするとエラーが発生する(fixtureも)
- SQL Serverに直接インサートした全角文字を含むデータを、Railsから取得すると文字化けする
1点目は、具体的には以下のエラーがログに出力されていました。
ActiveRecord::StatementInvalid (DBI::DatabaseError: Execute OLE error code:80040E14 in Microsoft OLE DB Provider for SQL Server 行 1: '20080731' の近くに無効な構文があります。 HRESULT error code:0x80020009 例外が発生しました。: INSERT INTO [categories] ([name], [updated_at], [note], [created_at]) VALUES('繝�せ繝�, '20080731 06:55:17', '', '20080731 06:55:17')):
INSERT分で、nameのデータの"'"がなくなってしまっているように見えます。fixturesファイルをShift_JISにしてみるとOKなかったので、文字コード関連で何か問題がありそうです。2点目もSQL ServerからのデータがShift_JISで渡されているのが原因のようです。検索してみたところ、、
こちらのページを参考にさせていただき解決することができました。ありがとうございました。
具体的には、config/environment.rbに以下の記述を追加します。
require 'win32ole' WIN32OLE.codepage = WIN32OLE::CP_UTF8
これでSQL Serverとのやり取りがUTF8になります。