SQLiteで利用可能なデータ型

テーブルには値を格納するためのカラムを定義しますが、どのカラムにどのような値を格納するかに応じてデータ型を指定することができます。ここでは SQLite のカラムで指定可能なデータ型について解説します。

(Last modified: )

格納される値のデータ型

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

ただデータ型を指定しなかった場合でもカラムに格納された値がどんなデータ型なのかは区別していて「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 型、などです。

カラムのデータ型

テーブルを作成する時にカラムに対してデータ型を指定するのは必須ではありませんが、指定することもできます。

次の例ではカラム id を INTEGER 型、カラム name を TEXT 型に指定してテーブルを作成しています。

create table personal(id integer, name text);

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

TEXT
NUMERIC
INTEGER
REAL
NONE

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

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

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

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

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

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

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

SQLite でカラムに指定できるデータ型は「TEXT」「NUMERIC」「INTEGER」「REAL」「NONE」の5つですが、例えば integer の代わりに int と指定しても同じ結果となります。これは他のデータベースとの互換性を考えてのことだと思われます。どのような指定方法が可能なのかは次を参照されて下さい。

データ型が文字列 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 型となります。

-- --

SQLite のカラムで指定可能なデータ型について解説しました。

( Written by Tatsuo Ikura )

プロフィール画像

著者 / TATSUO IKURA

これから IT 関連の知識を学ばれる方を対象に、色々な言語でのプログラミング方法や関連する技術、開発環境構築などに関する解説サイトを運営しています。