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

広告

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

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

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

create table test(val1, val2);

p2-1

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

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

p2-2

格納したデータを取得します。(見やすいようにモードとヘッダーの設定を変更しています)。

select * from test;

p2-3

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

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

p2-4

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

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

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

create table test2(val1 text, val2 numeric);

p2-5

テーブルにデータを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);

p2-6

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

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

p2-7

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

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

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

( Written by Tatsuo Ikura )