gpt4 book ai didi

php - Mysql没有正确插入二进制数据

转载 作者:可可西里 更新时间:2023-11-01 08:34:16 25 4
gpt4 key购买 nike

我正在研究数据压缩,出于某种原因我只需要 8 位。我通过decbin() 转换数字然后将其插入到mysql 中,mysql 列数据类型BIT 宽度为8 位。我使用了 mysql_query("INSERT INTO n (reading) VALUES (b'".$value."')") 并尝试了这个mysql_query("INSERT INTO n (reading) VALUES (".$value.")")。在插入值之前没问题,但在插入之后它的值不一样,它改变了值,例如在插入之前它回显值 116 然后我回显它的二进制值 1110100 和它在 mysql 列中插入的值是 00110000

function delta($reading){
global $flag;
$delta = $flag - $reading;
saveDelta(decbin($delta));
}

这是另一个保存值的函数

function saveDelta($dif) {
mysql_query("INSERT INTO n (reading) VALUES (".$dif.")");
}

最佳答案

如果 $value 被正确编码为'0''1' 的字符串。

编辑:我注意到您在插入数据时没有提供任何“序列号”。但是,请记住,如果不使用正确的 ORDER BY 子句,您将无法按照最初输入的顺序检索您的字节。也许您认为您读到了“116”,但 MySQL 从表中返回了另一行?


这里有一些使用示例,首先使用BIT输入:

CREATE TABLE b (value BIT(8));
INSERT INTO b VALUES (0),(1), (255);
INSERT INTO b VALUES (b'00000000'),(b'00000001'), (b'11111111');

请注意,当检索 BIT 列时,您将获得 signed 结果(即:存储 255 将读取 -1).

您可以将数据检索为 有符号 10 基整数或二进制形式(带有可选填充):

SELECT value FROM b;
SELECT BIN(value) FROM b;
SELECT LPAD(BIN(value), 8, '0') FROM b;

就我自己而言,我更喜欢 TINYINT UNSIGNED .这是一个 8 位类型,支持相同的值语法(<10 位数字>b'xxxxxxxx')——但会接受 UNSIGNED 说明符:

CREATE TABLE t (value TINYINT UNSIGNED);
INSERT INTO t VALUES (0),(1),(255);
INSERT INTO t VALUES (b'00000000'),(b'00000001'), (b'11111111');

您可以将数据检索为无符号 10 基整数或二进制形式(带有可选填充):

SELECT value FROM t;
SELECT BIN(value) FROM t;
SELECT LPAD(BIN(value), 8, '0') FROM t;

参见 http://sqlfiddle.com/#!2/4ff44/6对它们进行试验。

关于php - Mysql没有正确插入二进制数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17993961/

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