有 Rails 列类型的文档吗?

2024-02-15

我正在寻找的不仅仅是简单的类型列表在此页面上找到的 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: 数据库平台实现的要点与我想问的问题无关。如果说,:datetimeRails 文档中没有定义预期含义,那么 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(使用前将#替换为@)

有 Rails 列类型的文档吗? 的相关文章

随机推荐