我们有一个只有一列的myisam表 bit
两行,包括 0
以及 1
. 我们按此列分组,进行计数并选择它。预期结果如下。
select count( bit), bit from tab GROUP BY bit;
| count(bit) | bit |
|------------|-----|
| 1 | 0 |
| 1 | 1 |
但是当使用 distinct
关键字,列的输出值总是 1
. 为什么?
select count(distinct bit), bit from tab GROUP BY bit;
| count(bit) | bit |
|------------|-----|
| 1 | 1 | # WHYYY
| 1 | 1 |
我一直在抓取文件和互联网,但没有运气。以下是设置:
CREATE TABLE `tab` (
`bit` bit(1) NOT NULL
) ENGINE=MyISAM DEFAULT CHARSET=utf8; # When using InnoDB everything's fine
INSERT INTO `tab` (`bit`) VALUES
(CONV('1', 2, 10) + 0),
(CONV('0', 2, 10) + 0);
附言:还有一件事。我一直在做几个实验。使用 group_concat
,列 bit
重新独立。
select count(distinct bit), group_concat(bit) from tab GROUP BY bit;
| count(bit) | bit |
|------------|------------|
| 1 | 1 byte (0) |
| 1 | 1 byte (1) |
1条答案
按热度按时间pbgvytdp1#
多亏了这些评论,从现在起,我确信不再使用bit列。更可靠的选择是
tinyint(1)
.受adminer应用程序位处理的启发,我建议使用
bin
函数在每次选择时将位转换为期望值: