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
まとめ
やはり、なかなかの精度で変換してくれている。
これからも使い続けようと思う。
- DBD::SQLite::db do failed: unable to open database file at の対応
- macOSをMojaveに更新した。スクリプト実行環境のバージョンは変わったか
- Oracle MERGE文
- Oracleに負荷をかけているプログラムを探す
- OracleのFLASHBACKテーブルをPURGEする
- ORACLEのMERGE文 補足
- Oracleのパスワードの有効期限
- 手軽なのに強力なsqlite3
コメントを残す