Mat*_*hew 6 sqlite datetime android database-performance android-sqlite
这非常类似于另一个被关闭的问题,而不是一个真正的问题.我试图编辑它以使其有效重新开放,但被告知我最好不要问一个新问题.
我正在开发android并需要在sqlite数据库中存储datetime值来跟踪将生成通知的重复事件.我还需要能够根据时间范围查询数据库.
在SQLite的文档指出它不支持特定的日期类型但日期可以使用文本,REAL,或整型表示:
TEXT为ISO8601字符串("YYYY-MM-DD HH:MM:SS.SSS").
真实如朱利安日数,根据公历4714年11月24日格林威治中午以来的天数.
INTEGER as Unix Time,自1970-01-01 00:00:00 UTC以来的秒数.
最初的优点似乎是:
这听起来不错吗?使用INTEGER作为日期时间会使查询时间范围明显快于使用TEXT时的速度吗?还有什么我还没考虑过吗?
鉴于我的用例,哪些解决方案最好?
TEXT 对数据库中的可读性很有用,并且能够在以后直接显示(无需转换)
ISO 格式通常不用于显示;你也必须改变它。(这种格式对于调试更有用。)
如果需要对它们执行计算,则成本高昂
对于数据库,瓶颈通常是 I/O。我怀疑您是否会看到一个查询,其中日期值的实际格式会产生显着差异。
从时区引入可能的错误。
TEXT 格式没有时区说明符,但也没有其他格式。如果您说所有的 DB 值都采用 UTC,则没有区别。
REAL 对 1970 年之前的日期很有用
所有格式都支持 0 到 9999 之间的所有年份。(整数可以是负数。)
不代表一天中的时间,只代表几天。
一天中的时间表示为一个小数值。
INTEGER ...非常好的兼容性,因为它是一个广泛支持的标准。
但是 Java 使用毫秒,而不是秒。
还有什么我没有考虑过的吗?
大多数内置日期函数的默认输出格式是 TEXT。
鉴于我的用例,这些解决方案中的哪一个是最好的?
我会说 TEXT,但我认为不会有太大区别。
| 归档时间: |
|
| 查看次数: |
2479 次 |
| 最近记录: |