SQLite | データ型(Data Type) | SQLiteで使用できるデータ型

テーブルに値を保存する列を定義するときは、各列に保存する値に応じてデータ型を指定できます。ここでは、SQLiteの列に指定できるデータ型について説明します。

保存される値のデータ型

多くのデータベースでは列ごとにデータ型を指定し、その列に保存できる値を決定します。SQLite3では、テーブルを定義するときに各列のデータ型を指定する必要はありません。データ型を指定していない列には、さまざまな形式の値を保存できます。

列のデータ型を指定していなくても、保存された各値にはデータ型があります。SQLiteでは、値をNULLINTEGERREALTEXTBLOBの5つのストレージクラスに分類します。

データ型 説明
NULL NULL値
INTEGER 1、2、3、4、6、または8バイトで保存される符号付き整数
REAL 8バイトで保存される浮動小数点数
TEXT UTF-8、UTF-16BE、またはUTF-16LEで保存されるテキスト
BLOB 入力データをそのまま保存するBinary Large Object

SQL文での表記方法によって値のデータ型が決まります。たとえば、シングルクォート(')で囲んだ値はTEXT、小数点も指数もない数値はINTEGER、小数点または指数を含む数値はREALになります。

列のデータ型

テーブルを作成するときに列のデータ型を指定できますが、必須ではありません。

次の例では、id列をINTEGER型、name列をTEXT型としてテーブルを作成します。

create table customer (id integer, name text);

SQLite3では、列にTEXTNUMERICINTEGERREALNONEの5つの型アフィニティがあります。

TEXT
NUMERIC
INTEGER
REAL
NONE

列にデータ型を指定した場合でも、異なるデータ型の値を保存できます。列の型アフィニティと値のデータ型の組み合わせによって、値が変換されて保存されることがあります。

  1. TEXT列にINTEGERまたはREALの値を入れると、TEXTに変換して保存します。

  2. NUMERIC列にTEXTの値を入れると、INTEGERまたはREALへの変換を試みます。成功した場合は変換後の値を保存し、失敗した場合はTEXTのまま保存します。

  3. 34.0のように整数で表現できるREAL値、または同等のTEXT値をINTEGER列に入れると、INTEGERに変換して保存します。

  4. REAL列にINTEGER値を入れると、REALに変換して保存します。

  5. NONE型の列では変換処理を行いません。

列にデータ型を指定する方法

SQLite3の型アフィニティはTEXTNUMERICINTEGERREALNONEの5つですが、他のデータベースとの互換性などを考慮して、integerの代わりにintと宣言することもできます。列の型アフィニティは次の規則で決まります。

宣言したデータ型にINTという文字列が含まれる場合はINTEGERになります。

create table customer (id int, name text); -- integerの代わりにintを使用

宣言したデータ型にCHARCLOBTEXTのいずれかが含まれる場合はTEXTになります。

create table customer (id integer, name varchar); -- textの代わりにvarcharを使用

宣言したデータ型にBLOBが含まれる場合、またはデータ型を指定しない場合はNONEになります。

宣言したデータ型にREALFLOADOUBのいずれかが含まれる場合はREALになります。

上記のいずれにも該当しない場合はNUMERICになります。