select(count_star()).first 不满足特征

trait not satisfied for select(count_star()).first

我想统计 table 个命名主题的记录。我几乎是在 book

之前完成的

但当我这样做时

let count: u64 = topics.select(count_star()).first(&conn).unwrap();

我不断收到(.first 下划线表示错误):

[rustc E0277] [E] the trait bound `u64: diesel::deserialize::FromSql<diesel::
sql_types::BigInt, diesel::mysql::Mysql>` is not satisfied

the trait `diesel::deserialize::FromSql<diesel::sql_types::BigInt, diesel::
mysql::Mysql>` is not implemented for `u64`

help: the following implementations were found:
    <u64 as diesel::deserialize::FromSql<diesel::sql_types::
// I guess there's more information but Vim's
// Pmenu only shows up to eight lines.

所以我可能需要在这里做一些类型转换,但老实说,我不知道在哪一点。

如错误所述,count_star 生成 BigInt

并且正如 BigInt 的文档所示,BigInt 可以与 i64 相互转换,而不是 u64。

我想尽管 MySQL 有无符号整数,但 Diesel 不支持它们,因为 SQL 没有指定无符号整数,所以不是所有的数据库引擎都有它们(例如 Postgres 没有)。

无论如何,您的 count 应该是 i64,或者您需要设置从 BigInti64 再到 [=14 的更明确的转换=].