07月18日(木)
SQLのお勉強~SQLite3(2) SQLiteの型はすごく変
SQLite3 (2)
SQLite3の型はすごく変
①テーブルのカラムに型を指定しなくてよい
OracleやMySQLなど他のDBと違って、
SQLite3は、テーブルのカラムに型指定しなくても大丈夫です。
さらに同じカラムに色々な型で格納できます。
↓カラムに型を指定しなくてもエラーになりません。
BLOB型(NONE型)となります。
BLOB型だと、同じカラムに色々な型を格納できます。

INSERT文などで、実際にDBに格納される際、
SQLite3側が、NULL、INTEGER、REAL、TEXT、BLOBいずれかの型に判別して、格納します。
②カラムに型を指定することもできます ※2
ですが、数値型のカラムに文字列を格納しようとしても型エラーにはなりません。
文字列型に自動変換されます ※1。

個人的には型エラーにしてくれた方が、分かりやすいのですが、SQLite3はそういうものなのです。
こうした仕様を知っておかないと、
「なんで型エラーにならないの?」
と混乱してしまいます。
私は混乱しました。
==========
※1
INTEGERやREALなど数値系の型のカラムに文字列を格納しようとすると、TEXT型で格納されます。
↓詳細は、SQLite3公式HPで解説があります。
SQLite3本家
※2
・CREATE文で指定した型に「INT」という文字列が含まれていると、INTEGER型になります。
・同様に「CHAR」、「CLOB」または「TEXT」という文字列が含まれていると、TEXT型になります。
・「REAL」、「FLOA」または「DOUB」という文字列が含まれていると、REAL型になります。
・型を指定しない場合、または「BLOB」という文字列が含まれている場合、BLOB型(NONE型)になります。
・上記のいずれにも該当しない場合、NUMERIC型になります。
(参考)
↓アンドロイドアプリ「SQLコマンドリファレンス」です。
SQLコマンドリファレンス
SQLite3の型はすごく変
①テーブルのカラムに型を指定しなくてよい
OracleやMySQLなど他のDBと違って、
SQLite3は、テーブルのカラムに型指定しなくても大丈夫です。
さらに同じカラムに色々な型で格納できます。
↓カラムに型を指定しなくてもエラーになりません。
BLOB型(NONE型)となります。
BLOB型だと、同じカラムに色々な型を格納できます。

INSERT文などで、実際にDBに格納される際、
SQLite3側が、NULL、INTEGER、REAL、TEXT、BLOBいずれかの型に判別して、格納します。
②カラムに型を指定することもできます ※2
ですが、数値型のカラムに文字列を格納しようとしても型エラーにはなりません。
文字列型に自動変換されます ※1。

個人的には型エラーにしてくれた方が、分かりやすいのですが、SQLite3はそういうものなのです。
こうした仕様を知っておかないと、
「なんで型エラーにならないの?」
と混乱してしまいます。
私は混乱しました。
==========
※1
INTEGERやREALなど数値系の型のカラムに文字列を格納しようとすると、TEXT型で格納されます。
↓詳細は、SQLite3公式HPで解説があります。
SQLite3本家
※2
・CREATE文で指定した型に「INT」という文字列が含まれていると、INTEGER型になります。
・同様に「CHAR」、「CLOB」または「TEXT」という文字列が含まれていると、TEXT型になります。
・「REAL」、「FLOA」または「DOUB」という文字列が含まれていると、REAL型になります。
・型を指定しない場合、または「BLOB」という文字列が含まれている場合、BLOB型(NONE型)になります。
・上記のいずれにも該当しない場合、NUMERIC型になります。
(参考)
↓アンドロイドアプリ「SQLコマンドリファレンス」です。
SQLコマンドリファレンス
スポンサーサイト