三流プログラマの雑記

プログラム、ゲーム、株、その他雑記など書いてます。

DBのデータ型を調査

ということで、タイトルにあるように調べてみることにした。

Railsの開発環境
Windows7
Rails 3.2.6
Ruby 1.9.3p 194

DBの接続確認を行うには「Rails Console」にて以下のコマンドを実施する。
print ActiveRecord::Base.connection.native_database_types

今回調査したのは、 MySQLPostgreSQLOracle だったりします。
苦労したのはOracle、こいつは一筋縄じゃいかなかった。
ってことで忘れないようにメモしておくよ!

MySQL

DB名 :Mysql 5.5.24
コネクタ :Mysql2

{:primary_key=>"int(11) DEFAULT NULL auto_increment PRIMARY KEY",
:string=>{:name=>"varchar", :limit=>255},
:text=>{:name=>"text"},
:integer=>{:name=>"int", :limit=>4},
:float=>{:name=>"float"},
:decimal=>{:name=>"decimal"},
:datetime=>{:name=>"datetime"},
:timestamp=>{:name=>"datetime"},
:time=>{:name=>"time"},
:date=>{:name=>"date"},
:binary=>{:name=>"blob"},
:boolean=>{:name=>"tinyint", :limit=>1}}

PostgreSQL

DB名 :PostgreSQL 9.1
コネクタ名 :postgres-pr
{:primary_key=>"serial primary key",
:string=>{:name=>"character varying", :limit=>255},
:text=>{:name=>"text"},
:integer=>{:name=>"integer"},
:float=>{:name=>"float"},
:decimal=>{:name=>"decimal"},
:datetime=>{:name=>"timestamp"},
:timestamp=>{:name=>"timestamp"},
:time=>{:name=>"time"},
:date=>{:name=>"date"},
:binary=>{:name=>"bytea"},
:boolean=>{:name=>"boolean"},
:xml=>{:name=>"xml"},
:tsvector=>{:name=>"tsvector"}}

Oracle

DB名 :Oracle 11g EX
コネクタactiverecord-oracle_enhanced-adapter

{:primary_key=>"NUMBER(38) NOT NULL PRIMARY KEY",
:string=>{:name=>"VARCHAR2", :limit=>255},
:text=>{:name=>"CLOB"},
:integer=>{:name=>"NUMBER", :limit=>38},
:float=>{:name=>"NUMBER"},
:decimal=>{:name=>"DECIMAL"},
:datetime=>{:name=>"DATE"},
:timestamp=>{:name=>"TIMESTAMP"},
:time=>{:name=>"DATE"},
:date=>{:name=>"DATE"},
:binary=>{:name=>"BLOB"},
:boolean=>{:name=>"NUMBER", :limit=>1},
:raw=>{:name=>"RAW", :limit=>2000}}

※ 注意点:初期段階のコネクタは使用不可となっているため oracle_enhanced を使用する必要がある。
GemはGemFileに以下を記入し、アダプターをダウンロードする。
gem 'activerecord-oracle_enhanced-adapter', :git => 'git://github.com/rsim/oracle-enhanced.git'

RailsOracleを使用するためには、以下のファイルを順にインストールする必要がある。
Oracle XE版、Instant Client、ruby-oci8(Oracleに接続出来る様にする rubyインターフェース)

ネックとなるのはこいつだ!「ruby-oci8」
ちなみに以下から入手可能。
http://rubyforge.org/projects/ruby-oci8/

インストール方法は、以下を参考にしたよ!
http://ruby-oci8.rubyforge.org/ja/InstallForInstantClient.html

、、、参考にしたかったんだけど「nmake」でフリーズ。

nmake は以下をインストールするといいよ!とのこと
※注意:64bit向けであり、Windows7用じゃないのでいい方法とはいえません!
以下のサイトから、PSDK-amd64.exe をダウンロード
http://www.microsoft.com/en-us/download/details.aspx?id=6510

インストール後、ファイルパスへ以下を追加
C:\Program Files\Microsoft Platform SDK\Bin

コマンドプロンプトを立ち上げて以下を入力すると色々出てくれば準備OK!
nmake /?

あとは上記インストール方法を参考にインストールすれば大丈夫!

プロジェクト上の設定は、、、
new プロジェクト名 -d oracle で出来た。
database.yml のadapterを oracleoracle_enhancedにする。

以下、、、殴り書き(いつか直したいな、、、)
繋がらなければ、、、

C:\oraclexe\app\oracle\product\11.2.0\server\network\ADMIN
tnsnames.ora を疑え!(Windows7の場合はUACマジックに掛かるから対処法をいかに記述)
tnsnames.oraを設定しておけば、database.yml の database は XE を設定すると幸せになれるよ!(初期値)
※普通にDBの設定を書けば普通に繋がるんだけどね(汗

UACマジック対処法
コンパネ→ユーザアカウント→ユーザアカウント制御設定の変更→再起動