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

広告
eyecatch

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

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

例としてデータベースを一つ作成し、次のようなテーブルをデータベースの中に作成しました。テーブルにはカラムが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)

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

select * from test;

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

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

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

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

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)

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

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

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

SQLite入門の他の記事を見てみる

( Written by Tatsuo Ikura )

関連記事 (一部広告含む)
Profile
profile_img

著者 / TATSUO IKURA

初心者~中級者の方を対象としたプログラミング方法や開発環境の構築の解説を行うサイトの運営を行っています。