トップ «前の日記(2011-05-14) 最新 次の日記(2011-05-24)» 編集

2011-05-22 [長年日記]

_ SQL DBMSのboolean表現

すいません、目新しい話はないです。単に自分の経験不足と忘却力過多です。

結論

  • 大半の SQL DBMS には Boolean は存在せず、int の 0/1 で代用するケースが多い
  • 文字列 t/f も同じように機能する場合が多い
  • Boolean を持っているプログラミング言語と同じ感覚で true/false を書くとそのままの文字列が入って、どっちも true に見えたりする

以下ちょっと試したり調べた結果。

PostgreSQLtrue, 't', 'true', 'y', 'yes', '1' が true
MySQL tinyint で代用
SQLite 't'/'f' でうまく動いているっぽいけどマニュアルによると Integer で代用ということらしい*1
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 などを通さない

という部分をなんとなくにしか理解していなかった、というのが理由。

  1. rake db:seed で seed data を ActiveRecord から読み込むツールを用意して、確認用のデータは全部ここから突っ込んでいた
    • 当然 Ruby の boolean がそのまま使える
  2. 同じ seed が使えるとは限らないのは分かっていたつもりだったので ModelDumper も書いたのだけど、まだ理解が浅かった

というコンボ。

けっこう時間を浪費してしまった…。

cf.

import seed data from .csv or .yml for Rails 2.3.4+ ― Gist

Tags: DBMS

*1 試したところちょっとややこしくて、内部処理は integer なのかもしれないけど、手元の環境では 1/0 を突っ込んだらうまく解釈できなかったので、't'/'f' を入れることにした。