ruby on rails-迁移中的整数字段:default => 0和:null => false有何区别?

如果我使用迁移来更新数据库,并且添加了一个像这样的整数字段:

t.integer :foo :default => 0, :null => false

数据库中现有记录和新记录的默认状态是什么? 我希望答案是:-两者都将foo读回为0。

如果我有:null => false,默认=> 0是否必要?

只是想了解两者之间的区别...

cmaughan asked 2020-02-22T10:52:09Z
1个解决方案
99 votes

NULL告诉您的数据库不接受:null => false的值。

NULL做两件事:

  1. 当在查询中未指定NULL或不指定任何内容时,告诉数据库使用默认值“ 0”。
  2. 创建新对象时,告诉Rails将“ 0”用作默认值。

第2点确保在保存新对象时,您实际上有一个有效值。

回答您的问题:如果您不希望数据库中有NULL值,请设置:null => false,否则只需使用:default参数即可。 请注意,“ 0”和NULL是不同的东西。

对于索引目的或需要向第三方提供直接数据库访问权限,不具有NULL值可能很重要。

Ariejan answered 2020-02-22T10:52:52Z
translate from https://stackoverflow.com:/questions/4012871/how-do-default-0-and-null-false-differ-for-integer-fields-in-migrations