gpt4 book ai didi

php - MySQL 将不正确的记录返回给按位 SELECT

转载 作者:行者123 更新时间:2023-11-29 00:04:42 25 4
gpt4 key购买 nike

任何人都可以深入了解这里的问题吗?我在表中使用 BIGINT(20) 字段来存储按位值(这里也有其他字段,但为了简单起见,我忽略了它们)当在该字段上完成 SELECT 语句时,它返回一个为某些值选择记录,选择是正确的,对于其他值则是错误的。

例如:

TABLE A (there is a created_at timestamp field that isn't shown below)
id flag approved
1 0 Y
2 1 Y
3 10 N
4 100 Y
5 1000 Y
6 10000 Y
7 100000 Y
8 1000000 Y
9 10000000 Y
10 100000000 Y
11 1000000000 Y

现在如果我这样做:

SELECT * from tableA where approved = 'Y' AND flag & 4 ORDER BY created_at DESC

它仅正确返回 ID 为 4 的记录。一切正常,没有问题。但是,如果我这样做:

SELECT * from tableA where approved = 'Y' AND flag & 256 ORDER BY created_at DESC

然后我得到记录 5、6 和 10 - 而我只期望记录 10!这不是我的代码,因为如果我在 phpMyAdmin 中运行相同的查询,我会得到相同的响应,但为什么呢?这一定是我做错了什么,但我看不到什么?

我对第二条SQL语句的理解是,select all from table A where approved is set to Y and bit 256 in the flag field.

任何人都可以提供任何想法吗?导致问题的不仅仅是标志和 256,还有其他值。

最佳答案

您可以对整数列执行按位运算,但您仍然需要将它们存储为十进制值。

要在整数列中存储小数 2,请存储 2,而不是 10。您可能想使用 bit改为列类型。

无论哪种方式,您都可以使用 b'value' 表示法来编写值,如果这对您来说更容易的话。

INSERT INTO tablea (id, flag, approved)
VALUES (1, b'0', 'Y'), (2, b'1', 'Y'), (3, b'10', 'N')

关于php - MySQL 将不正确的记录返回给按位 SELECT,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28069648/

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