gpt4 book ai didi

mysql - 为什么 MySQL 查询不能正确插入 BIT(50) 位域

转载 作者:行者123 更新时间:2023-11-29 13:54:07 27 4
gpt4 key购买 nike

我正在当前项目的数据库中实现一个位字段列。它有 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 的奇怪困惑,这似乎不对,现在对我来说没有任何意义。

我在 Google 上找不到任何有关该主题的信息,也没有。据我了解,BIT 列最多支持 64 位。

提前致谢。

最佳答案

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

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

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

我尝试使用一下 PhpMyAdmin,但它显示 bit 列为空、NULL 或其他。即使使用 PhpMyAdmin 的 SQL 查询界面也没有显示应有的值。尝试一些其他数据库管理软件。我用Sequel Pro它显示输入数据库时​​的值。 (也许 PhpMyAdmin 也以某种方式这样做,我只是不知道如何。)

至于 PHP 引擎,嗯...参见 my interesting question 。某些 PHP 版本可能存在错误,也可能没有。至少与此类似的查询应该检索到正确的值。

SELECT (bitnum + 0) AS my_multiple_bit FROM features

这是 my RTM moment该问题的答案:如果不使用“+ 0”,则 bit(1) 列的值将被视为二进制字符串。(另请记住,PHP 版本可能会导致它自己的问题。)

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

顺便说一句。使用 bit(50) 列有什么具体原因吗? intchar 有什么问题? (我使用 bit(1) 作为 bool 值 true/ false 只是为了好玩。 tinyint(1) code> 是我的 bool 值的另一种选择。我没有读过 this whole article 但也许 bit 列不是 MySQL 中列类型的最佳选择。)

关于mysql - 为什么 MySQL 查询不能正确插入 BIT(50) 位域,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16154615/

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