gpt4 book ai didi

MySQL:SELECT (column == 'value') 返回类型为 “LONGLONG” 而不是 BOOL 的结果

转载 作者:行者123 更新时间:2023-11-29 01:53:44 26 4
gpt4 key购买 nike

当我做的时候

SELECT (column1 == 1) AS isOne FROM table1;

我希望得到一个包含 BOOL 类型列的结果集,又名 TINYINT(1)。不幸的是,我收到了“LONGLONG”。

这是一个实验。

CREATE TABLE `orders` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`ref` varchar(255) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8;

启动带有额外类型信息的 MySQL 提示 --column-type-in​​fo:

mysql> select id, id=1 as isOne  from orders;
Field 1: `id`
Catalog: `def`
Database: `reson_it`
Table: `orders`
Org_table: `orders`
Type: LONG
Collation: binary (63)
Length: 11
Max_length: 1
Decimals: 0
Flags: NOT_NULL PRI_KEY AUTO_INCREMENT NUM PART_KEY

Field 2: `isOne`
Catalog: `def`
Database: ``
Table: ``
Org_table: ``
Type: LONGLONG <--------------- WTF Why is this not a boolean/tinyint(1) ???
Collation: binary (63)
Length: 1
Max_length: 1
Decimals: 0
Flags: NOT_NULL BINARY NUM


+----+-------+
| id | isOne |
+----+-------+
| 1 | 1 |
+----+-------+
1 row in set (0.00 sec)

如您所见,我在“isOne”结果字段中看到了这个 LONGLONG 类型。为什么会这样?

我在 mac 上使用 MySQL 5.6.27(安装了自制软件)。

最佳答案

Why does this happen?

因为 MySQL 就是这样做的。

有线协议(protocol)不允许列在结果集中的行与行之间具有不同的数据类型(也不会是理智的)因此服务器必须预先决定每列的数据类型,特别是在输出时列是派生的,并不直接来自单个特定的表/列(因为在这种情况下,输出列的定义是已知的......根据定义,你可能会说......源列的定义)。

您观察到的行为可能会也可能不会被清楚地记录下来——如果是的话,我不会立即找到它——但可以从一个列是添加两个 TINYINT 列的结果这一事实中推断出来在一起,甚至将文字 0 添加到 TINYINT,实际上也将是 BIGINT(longlong)——尽管理论上它不需要大于 SMALLINTTINYINT——取决于查询——但 MySQL 总是使用用于内部操作和派生整数输出列的 64 位值。

最后一部分记录在案,将其推断到这种情况似乎也是合理的。

http://dev.mysql.com/doc/refman/5.6/en/arithmetic-functions.html

关于MySQL:SELECT (column == 'value') 返回类型为 “LONGLONG” 而不是 BOOL 的结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34475873/

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