以我的经验,在编程时正确安排日期/时间总是充满危险和困难。
Ruby和Rails一直以来都让我望而却步,即使是由于大量的选择,也是如此。 我从来不知道该选哪个。
当我使用Rails并查看ActiveRecord数据类型时,我可以找到以下内容
:datetime,:timestamp,:time和:date
而且不知道它们之间的差异是什么或陷阱潜伏在哪里。
有什么不同? 你用它们做什么?
(PS我正在使用Rails3)
#1楼
ActiveRecord中不同日期/时间格式之间的差异与Rails无关,而与所使用的任何数据库无关。
以MySQL为例(如果没有其他原因,因为它最受欢迎),则具有DATE
, DATETIME
, TIME
和TIMESTAMP
列数据类型; 就像您拥有CHAR
, VARCHAR
, FLOAT
和INTEGER
。
所以,你问,有什么区别? 好吧,其中有些是不言自明的。 DATE
仅存储日期, TIME
仅存储日期,而DATETIME
两者都存储。
DATETIME
和TIMESTAMP
之间的区别更加细微: DATETIME
的格式设置为YYYY-MM-DD HH:MM:SS
。 有效范围是从1000年到9999年(以及介于两者之间的所有时间。从数据库中获取的TIMESTAMP
看起来很相似,但实际上它只是unix时间戳的开头,其有效范围是1970年到2038年。除了数据库引擎内建的各种内置功能之外,这里的区别在于存储空间,因为DATETIME
存储年,月,日,时,分和秒中的每个数字,所以总共使用了8个字节。仅作为TIMESTAMP
存储从1970-01-01开始的秒数,它使用4个字节。
您可以在此处阅读更多有关MySQL时间格式之间差异的信息 。
最后,它取决于您需要的日期/时间列。 您是否需要存储1970年之前或2038年之后的日期和时间? 使用DATETIME
。 您是否需要担心数据库的大小,并且您处于该时间范围内? 使用TIMESTAMP
。 您只需要存储日期吗? 使用DATE
。 您只需要存储时间吗? 使用TIME
。
综上所述, Rails实际上为您做出了一些决策 。 :timestamp
和:datetime
都默认为DATETIME
,而:date
和:time
对应于DATE
和TIME
。
这意味着在Rails中,您只需决定是否需要存储日期,时间或两者都存储。
#2楼
:datetime(8个字节)
- 存储格式为YYYY-MM-DD HH:MM:SS的日期和时间
- 对于诸如birth_date之类的列很有用
:timestamp(4个字节)
- 自1970-01-01以来存储的秒数
- 对于诸如updated_at,created_at之类的列很有用
- :date(3个字节)
- 店铺日期
- :time(3个字节)
- 储存时间
#3楼
这是我发现的一个很棒而又精确的解释。
TIMESTAMP用于跟踪记录的更改,并在每次更改记录时进行更新。 DATETIME用于存储不受记录更改影响的特定和静态值。
TIMESTAMP还受与TIME ZONE相关的其他设置的影响。 DATETIME是常数。
TIMESTAMP在内部将当前时区转换为UTC进行存储,并在检索期间将其转换回当前时区。 DATETIME无法做到这一点。
TIMESTAMP是4个字节,DATETIME是8个字节。
支持的TIMESTAMP范围:'1970-01-01 00:00:01'UTC至'2038-01-19 03:14:07'UTC DATETIME支持的范围:'1000-01-01 00:00:00'至'9999 -12-31 23:59:59′
来源: https : //www.dbrnd.com/2015/09/difference-between-datetime-and-timestamp-in-mysql/# :~: text=DATETIME%20vs%20TIMESTAMP%3A,DATETIME%20is%20constant 。
也...
具有不同列“日期”类型和相应的rails迁移类型的表,具体取决于数据库
来源:oschina
链接:https://my.oschina.net/u/3797416/blog/3163761