カラムに格納された値のデータ型の確認

SQLite の環境でカラムにデータ型を指定した場合と指定しなかった場合でそれぞれテーブルを作成し、そこに色々なデータを格納したらどのようなデータ型として格納されるのかについて解説します。なお格納された値は最終的に「NULL」「INTEGER」「REAL」「TEXT」「BLOB」の5種類のデータ型に分類されます。

(Last modified: )

カラムにデータ型を指定しなかった場合

例としてデータベースを一つ作成し、次のようなテーブルをデータベースの中に作成しました。テーブルにはカラムが2つあり、カラムにはデータ型を指定していません。前のページで記載したように、カラムにデータ型を指定しなかった場合は NONE 型となり、カラムに格納された値は自動的な変換はされずにそのまま格納されます。

create table test(val1, val2);

カラムにデータ型を指定しなかった場合(1)

テーブルにデータを3件格納します。

insert into test values(null, 48);
insert into test values(3.14, 'Tokyo');
insert into test values('Good Morning', 1.2e-2);

カラムにデータ型を指定しなかった場合(2)

取得した値が見やすいようにモードとヘッダーの設定を変更しています。

.mode column .header on

カラムにデータ型を指定しなかった場合(3)

格納したデータを取得します。

select * from test;

カラムにデータ型を指定しなかった場合(4)

取得したデータは次の通りです。

val1          val2
------------  -----
              48
3.14          Tokyo
Good Morning  0.012

今度は値のデータ型を表示してみます。値のデータ型は typeof 関数を使って取得することができるため、次のように値とその値のデータ型を続けて表示するようにデータを取得してみます。

select val1, typeof(val1), val2, typeof(val2) from test;

カラムにデータ型を指定しなかった場合(5)

取得したデータ型は次の通りです。

val1          typeof(val1)  val2   typeof(val2)
------------  ------------  -----  ------------
              null          48     integer
3.14          real          Tokyo  text
Good Morning  text          0.012  real

null は NULL 型、整数は INTEGER 型、文字列は TEXT 型、浮動小数点は REAL 型として格納されています。このように追加された値に応じて格納された値のデータ型が設定されていることが確認できます。

カラムにデータ型を指定した場合

先ほどはカラムにデータ型を指定しないでテーブルを作成しましたが、今度は色々なデータ型をカラムに設定した時に値がどのように格納されるのかを確認してみます。

例として次のようなテーブルを作成しました。テーブルにはカラムが2つあり、1つ目のカラムには TEXT 型、2つ目のカラムには NUMERIC 型を設定してあります。

create table test2(val1 text, val2 numeric);

カラムにデータ型を指定した場合(1)

テーブルにデータを6件格納します。

insert into test2 values('Summer', 'Summer');
insert into test2 values(48, 48);
insert into test2 values('72', '72');
insert into test2 values(39.24, 39.24);
insert into test2 values('0.17', '0.17');
insert into test2 values(null, null);

カラムにデータ型を指定した場合(2)

格納したデータとそのデータ型を取得して表示してみます。

select val1, typeof(val1), val2, typeof(val2) from test2;

カラムにデータ型を指定した場合(3)

取得したデータとデータ型は次の通りです。

val1    typeof(val1)  val2    typeof(val2)
------  ------------  ------  ------------
Summer  text          Summer  text
48      text          48      integer
72      text          72      integer
39.24   text          39.24   real
0.17    text          0.17    real
        null                  null

TEXT 型を設定したカラムの場合、TEXT 型の値はそのまま格納されますが INTEGER 型や REAL 型の値は TEXT 型に変換されて格納されます。NULL 型の値は変換されずにそのまま格納されます。

NUMERIC 型を設定したカラムに TEXT 型の値を格納すると INTEGER 型または REAL 型に変換を試みます。成功すれば変換された値で格納され、失敗すれば TEXT 型のまま格納されます。NULL 型の値は変換されずにそのまま格納されます。

今回は TEXT 型と NUMERIC 型だけを試しました。カラムにデータ型を設定した場合には場合によっては値のデータ型が変換されて格納されていることが確認頂けたかと思います。

-- --

SQLite で作成したテーブルに色々なデータを格納したときに、どのようなデータ型として格納されるのかについて解説しました。

( Written by Tatsuo Ikura )

プロフィール画像

著者 / TATSUO IKURA

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