3

次の sqlite3 インタラクティブ セッションをご覧ください。

sqlite> create table d(t date);
sqlite> insert into d values('1913-12-23');
sqlite> select t,typeof(t) from d;
1913-12-23|text
sqlite>

日付フィールドがテキストとして表示されるのはなぜですか? 数値の場合、記憶域は小さくなり、クエリは高速になりますか?

Sqlite3 データ型のドキュメントは、§2.2 の表によると、日付列のアフィニティが数値であることを示しています。テキストではなく数値として保存された日付フィールドは、占めるスペースが少ないので理想的だと思います。私はまだ sqlite をよく理解していない可能性が非常に高いので、私の懸念は無効かもしれません。

簡単にコピー/貼り付けするには:

create table d(t date);
insert into d values('1913-12-23');
select t,typeof(t) from d;
4

1 に答える 1

3

typeof('1913-12-23')が返さtextれる理由'1913-12-23'は、それが文字列であり、文字列としてテーブルに格納されているためです。タイプ アフィニティは、変換がロスレスになる場合にのみ機能します。たとえば、値'123456'は数値に変換されます。

SQLite にはネイティブの日付データ型がありません。組み込みの日付関数で日付を処理できるようにするには、日付をyyyy-mm-dd文字列または数値 (ユリウス日または Unix エポックからの秒数)として保存する必要があります。

整数は文字列よりもストレージを占有しないため、DB のボトルネックが I/O である可能性が高い場合、クエリは高速になります。

于 2012-11-25T19:55:32.690 に答える