为什么MySQL查询不能正确插入位(50)字段

为什么MySQL查询不能正确插入位(50)字段,mysql,bit,bit-fields,Mysql,Bit,Bit Fields,我正在为我当前项目的数据库实现一个位字段列。它有50位长,但似乎没有正确插入我在PHP中创建的位字段。这是文本查询(我尝试用PHP和phpMyAdmin提交它) 但是phpMyAdmin和PHP出于某种原因输出的值是: 00001100110011100000111000001101100011000000111000 现在,如果在select查询中选择使用BIN(bitnum)选择bitnum列,它将输出正确的值。但在我继续之前,我需要知道我是否真的做对了(因为我需要稍后对照标志检查列)。我

我正在为我当前项目的数据库实现一个位字段列。它有50位长,但似乎没有正确插入我在PHP中创建的位字段。这是文本查询(我尝试用PHP和phpMyAdmin提交它)

但是phpMyAdmin和PHP出于某种原因输出的值是:

00001100110011100000111000001101100011000000111000
现在,如果在select查询中选择使用BIN(bitnum)选择bitnum列,它将输出正确的值。但在我继续之前,我需要知道我是否真的做对了(因为我需要稍后对照标志检查列)。我插入的第一个位图似乎不正确,中间只有一个1位,变成了0和1s的奇怪混乱,现在对我来说没有任何意义。

我在谷歌上找不到关于这个主题的任何东西,也没有找到。 据我所知,位列最多支持64位


提前感谢。

您的
bitnum
列是否定义为
位(50)

我的猜测是该值被正确地插入到DB中。之后的一切都需要一些测试

当您说“phpMyAdmin和PHP输出出于某种原因是:
00001111001110000011100000011110000010110001100111000
”时,是否使用了一些查询

我尝试使用PhpMyAdmin,但它将
bit
列显示为空、
NULL
或其他内容。即使使用PhpMyAdmin的SQL查询接口,也没有显示应该显示的值。试试其他的数据库管理软件。我使用,它显示输入DB时的
值。(也许PhpMyAdmin也不知怎么做了,我只是不知道怎么做。)

至于PHP引擎,那么。。。看见在某些PHP版本中可能存在错误。至少一个类似于此的查询应该检索到正确的值

SELECT (bitnum + 0) AS my_multiple_bit FROM features
这就是问题所在:
如果不使用“+0”,则位(1)列的值将被视为二进制字符串。
(还请记住PHP版本可能会导致自身问题。)

也可以使用
BIN(bitnum)
作为
(bitnum+0)
。尝试使用一个或多个PHP引擎版本进行测试。如果一切正常,那么。。。然后一切都开始了


顺便问一下,使用
位(50)
列有什么具体原因吗?
int
char
有什么问题?(我使用
bit(1)
作为布尔值
true
/
false
,只是为了好玩。
tinyint(1)
是布尔值的另一种选择。我没有读过,但可能
bit
列不是MySQL中列类型的最佳选择。)

我决定放弃bit解决方案,使用int(实际上是bigint)正如你所建议的那样。我将您的答案设置为正确,因为我在其他地方读到,添加“+0”将迫使MySQL正确处理它。此外,你分享的文章似乎很有价值,但显然这不是最好的方式。而按位And在数值上也同样有效,我只是没有想到——但它非常有意义:)谢谢你的时间。
SELECT (bitnum + 0) AS my_multiple_bit FROM features