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
MySQLtinyint で代用
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 などを通さない

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

  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

About

例によって個人のなんちゃらです