我正在寻找的不仅仅是简单的类型列表在此页面上找到的 http://api.rubyonrails.org/classes/ActiveRecord/ConnectionAdapters/TableDefinition.html#method-i-column:
:primary_key, :string, :text, :integer, :float, :decimal, :datetime, :timestamp, :time, :date, :binary, :boolean
但有没有任何文件实际上defines这些领域?
具体来说:
- 有什么区别
:string
and :text
?
- Between
:float
and :decimal
?
- 有什么显着特点
:time
, :timestamp
, and :datetime
?
这些类型的细微差别是否记录在任何地方?
EDIT: 数据库平台实现的要点与我想问的问题无关。如果说,:datetime
Rails 文档中没有定义预期含义,那么 db-adapter-writers 在选择相应的列类型时会遵循什么原则?
根据个人经验制定的指导方针:
-
String:
- 限制为 255 个字符(取决于 DBMS)
- 用于短文本字段(姓名、电子邮件等)
-
Text:
- 无限长度(取决于 DBMS)
- 用于评论、博客文章等。一般经验法则:如果通过文本区域捕获,请使用文本。对于使用文本字段的输入,请使用字符串。
-
Integer:
-
Float:
- 以浮点精度存储的十进制数
- 精度是固定的,这对于某些计算可能会出现问题;由于舍入不准确,通常不利于数学运算。
-
Decimal:
- 十进制数的存储精度根据您的计算需要而变化;将它们用于需要准确的数学
- See this https://stackoverflow.com/questions/3039650/ruby-bigdecimal-sanity-check-floating-point-newb发布示例并深入解释浮点数和小数之间的差异。
-
Boolean:
- 用于存储真/假属性(即只有两种状态的事物,例如开/关)
-
Binary:
- 用于以原始格式将图像、电影和其他文件存储在称为blobs
-
:primary_key
- 该数据类型是一个占位符,Rails 会将其转换为您选择的数据库所需的任何主键数据类型(即
serial primary key
在 postgreSQL 中)。它的使用有些复杂,不推荐使用。
- 使用模型和迁移约束(例如
validates_uniqueness_of
and add_index
与:unique => true
选项)而不是在您自己的字段之一上模拟主键功能。
-
Date:
-
Time:
-
DateTime:
-
Timestamp
- 存储日期和时间
- 注意:对于 Rails 而言,Timestamp 和 DateTime 含义相同(使用任一类型来存储日期和时间)。有关两者存在原因的 TL;DR 描述,请阅读底部段落。
这些是经常存在混淆的类型。我真的不知道为什么没有关于这些的官方文档。另外,我想您提到的这些数据库适配器是由编写 Rails 的同一个人编写的,因此他们在编写适配器时可能不需要任何文档。
注:两者同时存在:DateTime
and :Timestamp
据我所知,Rails 包含它主要是为了与数据库系统兼容。例如,MySQL 的TIMESTAMP
数据类型存储为 unix 时间戳。其有效范围为 1970 年至 2038 年,时间存储为自上次以来经过的秒数epoch http://en.wikipedia.org/wiki/Epoch_%28reference_date%29#Computing,这被认为是标准的,但实际上可能因系统而异。 MySQL后来推出了DATETIME
数据类型,自“1000-01-01 00:00:00”以来存储为秒(从 5.6.4 开始具有可选的小数秒),代价是尺寸增加 https://dev.mysql.com/doc/refman/8.0/en/storage-requirements.html#data-types-storage-reqs-date-time. The TIMESTAMP
保留数据类型是为了向后兼容。其他数据库系统也经历了类似的演变。 Rails 认识到存在多种标准,并为这两种标准提供了接口。然而,Rails ActiveRecord 默认两者:Timestamp
and :DateTime
转换为存储在 MySql 中的 UTC 日期DATETIME
,所以它对 Rails 程序员来说没有功能上的区别。这些的存在是为了让用户wish这样做可以区分两者。 (更深入的解释,请参见this https://stackoverflow.com/questions/3928275/in-ruby-on-rails-whats-the-difference-between-datetime-timestamp-time-and-da所以回答)。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)