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