0

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

 INSERT INTO features (title, category_id, bitnum) 
 VALUES ("a6", "0", b'00000000000000000000000000100000000000000000000000')

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

00001100110011100000111000001101100011000000111000

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

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

提前致谢。

4

1 回答 1

1

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

我的猜测是该值已正确插入数据库。之后的一切都需要进行一些测试。

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

我尝试使用 PhpMyAdmin,但它显示bit列为空,NULL或其他。即使使用 PhpMyAdmin 的 SQL 查询界面也没有显示它们应该出现的值。尝试一些其他的数据库管理软件。我使用Sequel Pro,它会显示bit输入数据库的值。(也许 PhpMyAdmin 也以某种方式做到了,我只是不知道怎么做。)

至于 PHP 引擎,嗯……看我有趣的问题。某些 PHP 版本中可能存在错误。至少与此类似的查询应该检索到正确的值。

SELECT (bitnum + 0) AS my_multiple_bit FROM features

这是我提出这个问题的 RTM 时刻If "+ 0" is not used the value of a bit(1) column is treated as binary string.:(还要记住PHP 版本可能会导致它自己的问题。)

也许也BIN(bitnum)可以作为(bitnum + 0). 尝试使用另外一个 PHP 引擎版本进行测试。如果一切正常,那么……那么一切正常。

顺便提一句。使用列是否有某些特定原因bit(50)int或有什么问题char?(我用作bit(1)布尔值true/false只是为了好玩。tinyint(1)是我的另一个替代布尔值。我没有阅读整篇文章,但也许bit​​列不是 MySQL 中列类型的最佳选择。)

于 2013-04-22T20:05:43.747 回答