SQLite | データ型(Data Type) | SQLiteで使用できるデータ型
テーブルに値を保存する列を定義するときは、各列に保存する値に応じてデータ型を指定できます。ここでは、SQLiteの列に指定できるデータ型について説明します。
保存される値のデータ型
多くのデータベースでは列ごとにデータ型を指定し、その列に保存できる値を決定します。SQLite3では、テーブルを定義するときに各列のデータ型を指定する必要はありません。データ型を指定していない列には、さまざまな形式の値を保存できます。
列のデータ型を指定していなくても、保存された各値にはデータ型があります。SQLiteでは、値をNULL、INTEGER、REAL、TEXT、BLOBの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では、列にTEXT、NUMERIC、INTEGER、REAL、NONEの5つの型アフィニティがあります。
TEXT
NUMERIC
INTEGER
REAL
NONE
列にデータ型を指定した場合でも、異なるデータ型の値を保存できます。列の型アフィニティと値のデータ型の組み合わせによって、値が変換されて保存されることがあります。
-
TEXT列にINTEGERまたはREALの値を入れると、TEXTに変換して保存します。 -
NUMERIC列にTEXTの値を入れると、INTEGERまたはREALへの変換を試みます。成功した場合は変換後の値を保存し、失敗した場合はTEXTのまま保存します。 -
34.0のように整数で表現できるREAL値、または同等のTEXT値をINTEGER列に入れると、INTEGERに変換して保存します。 -
REAL列にINTEGER値を入れると、REALに変換して保存します。 -
NONE型の列では変換処理を行いません。
列にデータ型を指定する方法
SQLite3の型アフィニティはTEXT、NUMERIC、INTEGER、REAL、NONEの5つですが、他のデータベースとの互換性などを考慮して、integerの代わりにintと宣言することもできます。列の型アフィニティは次の規則で決まります。
宣言したデータ型にINTという文字列が含まれる場合はINTEGERになります。
create table customer (id int, name text); -- integerの代わりにintを使用
宣言したデータ型にCHAR、CLOB、TEXTのいずれかが含まれる場合はTEXTになります。
create table customer (id integer, name varchar); -- textの代わりにvarcharを使用
宣言したデータ型にBLOBが含まれる場合、またはデータ型を指定しない場合はNONEになります。
宣言したデータ型にREAL、FLOA、DOUBのいずれかが含まれる場合はREALになります。
上記のいずれにも該当しない場合はNUMERICになります。