sqlite3のデータ型

sqlite3のデータ型

今まで、適当に使っていたsqlite3だが、sqlite3のデータ型は5種類あるようだ。

  • NULL
  • INTEGER
  • REAL
  • TEXT
  • BLOB

数値はintやnumberとして定義してしまっていたが、これは自動でINTEGERと判断されるようだ。
また、charやvarcharと定義した場合は、TEXTとして扱われるようだ。

sqlite3のデータ型の定義は厳密ではなく、可能な限り定義したタイプに変換して登録される。
データ型が異なるからといって、INSERTやUPDATEがエラーになることはない。

INTEGERの項目にはINTEGERとして登録し、
TEXTの項目にはTEXTとして登録される。
INTEGERの項目に’A’を登録しようとするとTEXTの’A’として登録される。
1.5を登録しようとすると、REALの1.5として登録される。
TEXTの項目は、TEXTに変換され登録される。
INTEGERに’1.5 ‘を登録すると、REAL 1.5 として登録され、
TEXTに’1.5 ‘を登録すると、TEXT ‘1.5 ‘として登録される。

かなり上手に型変換してくれるので、余程間違った登録さえしなければ、
数値は数値として、文字は文字として処理できる。

試しに、いろいろな値を入れてみた

データ投入


drop table if exists t1;
create table t1 (
a TEXT,
b INTEGER,
c REAL,
d BLOB,
e
);
insert into t1 values ('A', 'A', 'A', 'A', 'A' );
insert into t1 values ('B ', 'B ', 'B ', 'B ', 'B ' );
insert into t1 values ('1', '1', '1', '1', '1' );
insert into t1 values ('2 ', '2 ', '2 ', '2 ', '2 ' );
insert into t1 values (' 3', ' 3', ' 3', ' 3', ' 3' );
insert into t1 values (' 4 ',' 4 ',' 4 ',' 4 ',' 4 ');
insert into t1 values (5, 5, 5, 5, 5 );
insert into t1 values (-6, -6, -6, -6, -6 );
insert into t1 values (7.1, 7.1, 7.1, 7.1, 7.1 );
insert into t1 values (-8.2, -8.2, -8.2, -8.2, -8.2 );
insert into t1 values (0.009,0.009,0.009,0.009,0.009);
insert into t1 values (null, null, null, null, null );

検索


.header on
.mode column
select
'|' || a || '|' as TEXT, typeof(a) as T_TEXT,
'|' || b || '|' as INTEGER, typeof(b) as T_INTEGER,
'|' || c || '|' as REAL, typeof(c) as T_REAL,
'|' || d || '|' as BLOB, typeof(d) as T_BLOB,
'|' || e || '|' as NONE, typeof(e) as T_NONE
from
t1
;

結果


TEXT T_TEXT INTEGER T_INTEGER REAL T_REAL BLOB T_BLOB NONE T_NONE
---------- ---------- ---------- ---------- ---------- ---------- ---------- ---------- ---------- ----------
|A| text |A| text |A| text |A| text |A| text
|B | text |B | text |B | text |B | text |B | text
|1| text |1| integer |1.0| real |1| text |1| text
|2 | text |2| integer |2.0| real |2 | text |2 | text
| 3| text |3| integer |3.0| real | 3| text | 3| text
| 4 | text |4| integer |4.0| real | 4 | text | 4 | text
|5| text |5| integer |5.0| real |5| integer |5| integer
|-6| text |-6| integer |-6.0| real |-6| integer |-6| integer
|7.1| text |7.1| real |7.1| real |7.1| real |7.1| real
|-8.2| text |-8.2| real |-8.2| real |-8.2| real |-8.2| real
|0.009| text |0.009| real |0.009| real |0.009| real |0.009| real
null null null null null

まとめ

やはり、なかなかの精度で変換してくれている。
これからも使い続けようと思う。

同じタグの記事
同じカテゴリの記事

コメント

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

CAPTCHA