我正在寻找比这个页面上找到的简单类型列表更多的内容:
:主键,:字符串,:文本,:整数,:浮点型,:十进制,:日期时间,:时间戳,:时间,:日期,:二进制,:布尔型
但是,是否有任何文档实际上 * 定义 * 了这些字段?
具体而言:
:string
和:text
有什么区别?- 在
:float
和:decimal
之间? :time
、:timestamp
和:datetime
的区别特征是什么?
这些类型的细微差别是否在任何地方记录在案?
编辑:**DB平台实现的要点与我试图提出的问题无关。**如果:datetime
在Rails文档中没有定义的预期含义,那么db-adapter-writer在选择相应的列类型时会遵循什么?
2条答案
按热度按时间jhdbpxl91#
根据个人经验制定的指南:
serial primary key
)。它的使用有些复杂,不推荐使用。:unique => true
选项的validates_uniqueness_of
和add_index
)来模拟您自己的某个字段上的主键功能。这些都是经常存在混淆的类型。我真的不知道为什么没有关于这些的官方文档。另外,我想你提到的这些数据库适配器是由编写Rails的同一个人编写的,所以他们在编写适配器时可能不需要任何文档。
注:据我所知,
:DateTime
和:Timestamp
的存在主要是为了与数据库系统兼容,例如,MySQL的TIMESTAMP
数据类型存储为unix时间戳,其有效范围从1970到2038,时间存储为自上一个纪元以来经过的秒数,这应该是标准的,但在实践中,不同的系统会有所不同。MySQL后来引入了DATETIME
数据类型,它从"1000 - 01 - 01 00:00:00"开始以秒为单位存储(从5.6.4开始,可选的小数秒),代价是增加了数据大小。TIMESTAMP
数据类型被保留用于向后兼容。其他数据库系统也经历了类似的演变。Rails认识到存在多种标准,并为两者提供了接口。然而,Rails ActiveRecord默认:Timestamp
和:DateTime
为存储在MySql的DATETIME
中的UTC日期,所以它对Rails程序员没有功能上的差异。这些数据类型的存在是为了让希望区分两者的用户能够这样做。(更深入的解释,请参见this SO答案)。lmvvr0a82#
从Rails master分支源代码中我发现:
abstract mysql_adapter
type_to_sql
方法中super