SQLiteで利用可能なデータ型

多くのデータベースではカラム毎にデータ型を指定し格納できる値が決められています。SQLite3ではテーブルを定義する時にカラム毎にデータ型を指定しなくても構いません。その為、同じカラムに異なったデータ型の値が格納されることもあります。

create table personal(id, name);

ただカラムに格納された値がどんなデータ型なのかは区別していて「NULL」「INTEGER」「REAL」「TEXT」「BLOB」の5種類のデータ型に分類します。

NULL       NULL値
INTEGER    符号付整数。1, 2, 3, 4, 6, or 8 バイトで格納
REAL       浮動小数点数。8バイトで格納
TEXT       テキスト。UTF-8, UTF-16BE or UTF-16-LEのいずれかで格納
BLOB       Binary Large OBject。入力データをそのまま格納

SQL文に記述された値の記述方法からその値のデータ型を決めています。例えば「'」で囲まれていればTEXT型、小数点も指数も無ければINTEGER型、小数点か指数があればREAL型、などです。

カラムのデータ型

先ほど記述したとおり、SQLiteにおいては値そのものがどのようなデータ型なのか識別していますが、格納するカラムの方にはデータ型を指定する必要はありません。

カラムに対してデータ型としてINTEGERを指定し、さらにPRIMARY KEY制約を付けた場合は格納できる値が限定されます。詳しくは「INTEGER PRIMARY KEYが設定されたカラム」を参照して下さい。

ただSQLiteにおいてもカラムそのものにデータ型を指定することも可能です。

create table personal(id integer, name text);

SQLite3でカラムに指定できるデータ型は「TEXT」「NUMERIC」「INTEGER」「REAL」「NONE」の5つです。

TEXT
NUMERIC
INTEGER
REAL
NONE

カラムへデータ型を指定した場合でもどのようなデータ型の値でも格納できますが、カラムのデータ型と値のデータ型の組み合わせによっては値のデータ型を変換した上で格納します。変換が行われるケースは次の通りです。

TEXT型のカラムにINTEGERやREALのデータ型の値が格納された場合、TEXT型に変換されてから格納されます。

NUMERIC型のカラムにTEXT型の値が格納された場合、INTEGER型またはREAL型に変換を試みます。成功すればそのデータ型で格納されますが、失敗すればTEXT型のまま格納されます。

INTEGER型のカラムに整数として表せるREAL型の値(例えば34.0など)、又は同じ形式のTEXT型の値が格納された場合、INTEGER型に変換して格納します。

REAL型のカラムにINTEGERの値が格納された場合、REAL型に変換して格納します。

NONE型のカラムの場合は変換は行われません。

カラムのデータ型の決定方法

SQLite3でカラムに指定できるデータ型は「TEXT」「NUMERIC」「INTEGER」「REAL」「NONE」の5つですが、最終的にこの5つのデータ型のいずれかに判定されるだけでカラムへのデータ型の指定は他の文字列でも可能です。(これは他のデータベースとの互換性を考えてのことだと思われます)。

データ型が文字列「INT」を含む場合、INTEGER型となります。

create table personal(id int, name text);

データ型が文字列「CHAR」「CLOB」「TEXT」のいずれかを含む場合、TEXT型となります。

create table personal(id int, name varchar);

データ型が文字列「BLOB」を含む場合、またデータ型が指定されなかった場合はNONE型となります。

データ型が文字列「REAL」「FLOA」「DOUB」のいずれかを含む場合、REAL型となります。

上記のいずれでもない場合はNUMERIC型となります。

次のページ以降で具体的に確認を行います。合わせて参照して下さい。