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においては値そのものがどのようなデータ型なのか識別していますが、格納するカラムの方にはデータ型を指定する必要はありません。
ただ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型となります。
次のページ以降で具体的に確認を行います。合わせて参照して下さい。