1

我的代码上有这个:

scope :to_send, where(:sent => false)

在本地使用 mysql 我看到了这个:

`scheduled_messages`.`sent` = 0 

在 Heroku 上(使用 pg):

"scheduled_messages"."sent" = 'f' 

为什么?

4

1 回答 1

9

PostgreSQL 有一个本地boolean类型,其中 true 由字符串字面量表示,'t'而 false 由'f'(还有其他字面量,但这些是最常见的字面量)。MySQL 没有本机布尔类型,而是使用 C 样式的整数作为布尔值。

Rails 的 MySQL 和 PostgreSQL 适配器负责将原生 Ruby 值(例如false)转换为相关数据库的等效值(0对于 MySQL,'f'对于 PostgreSQL)。

看起来您是在 MySQL 之上开发,但在 PostgreSQL 上部署。布尔处理的差异是您最不担心的。您确实应该在同一个数据库之上进行开发和部署。

于 2012-12-24T04:31:39.747 回答