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 ‘として登録される。
かなり上手に型変換してくれるので、余程間違った登録さえしなければ、
数値は数値として、文字は文字として処理できる。
試しに、いろいろな値を入れてみた
データ投入
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | 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 ); |
検索
1 2 3 4 5 6 7 8 9 10 11 | .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 ; |
結果
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | 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
同じカテゴリの記事