gpt4 book ai didi

mysql - bool 值的 Postgres 和 MySql 之间的返回值差异

转载 作者:行者123 更新时间:2023-11-29 03:45:28 27 4
gpt4 key购买 nike

如果我这样做:

ActiveRecord::Base.connection.execute('select 1 as t').first

在 Postgres 和 MySql 上我得到这个:

MySql: [1]
Postgres: {"t"=>"1"}

谁能解释一下那是什么?!

最佳答案

不管 bug 在哪里,这都显示了两个数据库之间有趣的差异(以及为什么跨数据库抽象很难的一个例子)。

MySQL 本身没有真正的 bool 类型。它仅使用 tinyints 作为 bool 值。

在 MySQL 上:

SELECT true;
+------+
| TRUE |
+------+
| 1 |
+------+
1 row in set (0.00 sec)

bool 表达式也计算为整数:

select true is not false;
+-------------------+
| true is not false |
+-------------------+
| 1 |
+-------------------+
1 row in set (0.00 sec)

在 PostgreSQL 上

PostgreSQL 支持返回“t”或“f”的真 bool 类型。

select true;
bool
------
t
(1 row)

select true is not false;
?column?
----------
t
(1 row)

请注意,您还可以将整数转换为 bool 值:

select 1::bool;
bool
------
t
(1 row)

select 2::bool;
bool
------
t
(1 row)

select 0::bool;
bool
------
f
(1 row)

显然,这些包的两位作者对于如何解决 bool 类型问题有不同的想法。

关于mysql - bool 值的 Postgres 和 MySql 之间的返回值差异,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6342656/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com