すいません、目新しい話はないです。単に自分の経験不足と忘却力過多です。
結論
- 大半の SQL DBMS には Boolean は存在せず、int の 0/1 で代用するケースが多い
- 文字列 t/f も同じように機能する場合が多い
- Boolean を持っているプログラミング言語と同じ感覚で true/false を書くとそのままの文字列が入って、どっちも true に見えたりする
以下ちょっと試したり調べた結果。
PostgreSQL | true, 't', 'true', 'y', 'yes', '1' が true |
MySQL | tinyint で代用 |
SQLite | 't'/'f' でうまく動いているっぽいけどマニュアルによると Integer で代用ということらしい{{fn "試したところちょっとややこしくて、内部処理は integer なのかもしれないけど、手元の環境では 1/0 を突っ込んだらうまく解釈できなかったので、't'/'f' を入れることにした。"}} |
Oracle | やはり tinyint で代用 |
ということで自作の rails console 用 ModelDumper は boolean を 't'/'f' で返すようにしてみた。
A model dumper for rails console ( Rails 3 or later ) and .irbrc for rails env — Gist
感想
なんでこんなこと書いてるかというと、一つには
Rails でも fixture の部分は ActiveRecord などを通さない
という部分をなんとなくにしか理解していなかった、というのが理由。
- rake db:seed で seed data を ActiveRecord から読み込むツールを用意して、確認用のデータは全部ここから突っ込んでいた
- 当然 Ruby の boolean がそのまま使える
- 同じ seed が使えるとは限らないのは分かっていたつもりだったので ModelDumper も書いたのだけど、まだ理解が浅かった
というコンボ。
けっこう時間を浪費してしまった…。
cf.