我的代码上有这个:
scope :to_send, where(:sent => false)
在本地使用 mysql 我看到了这个:
`scheduled_messages`.`sent` = 0
在 Heroku 上(使用 pg):
"scheduled_messages"."sent" = 'f'
为什么?
我的代码上有这个:
scope :to_send, where(:sent => false)
在本地使用 mysql 我看到了这个:
`scheduled_messages`.`sent` = 0
在 Heroku 上(使用 pg):
"scheduled_messages"."sent" = 'f'
为什么?
PostgreSQL 有一个本地boolean
类型,其中 true 由字符串字面量表示,'t'
而 false 由'f'
(还有其他字面量,但这些是最常见的字面量)。MySQL 没有本机布尔类型,而是使用 C 样式的整数作为布尔值。
Rails 的 MySQL 和 PostgreSQL 适配器负责将原生 Ruby 值(例如false
)转换为相关数据库的等效值(0
对于 MySQL,'f'
对于 PostgreSQL)。
看起来您是在 MySQL 之上开发,但在 PostgreSQL 上部署。布尔处理的差异是您最不担心的。您确实应该在同一个数据库之上进行开发和部署。