我正在进行数据压缩,出于某种原因,我只需要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.")");
}
答案 0 :(得分:2)
语法"INSERT INTO n (reading) VALUES (b'".$value."')"
应该有效,前提是$value
已正确编码为'0'
和'1'
的字符串。
编辑:我注意到您在插入数据时没有提供任何“序列号”。但是,请记住,如果不使用正确的ORDER BY
子句,则无法检索 bytes 首先输入的顺序。也许你认为你读的是“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
列时,您将获得签名结果(即:存储 255 将读取 -1 )
您可以将签名的 10基本整数或二进制形式(带可选填充)检索数据:
SELECT value FROM b;
SELECT BIN(value) FROM b;
SELECT LPAD(BIN(value), 8, '0') FROM b;
至于我自己,我更喜欢TINYINT UNSIGNED
。这是一个8位类型,支持相同的语法(< 10-base digit> 或 b'xxxxxxxx') - 但会接受{{ 1}}说明符:
UNSIGNED
您可以将无符号 10基本整数或二进制形式(带可选填充)检索数据:
CREATE TABLE t (value TINYINT UNSIGNED);
INSERT INTO t VALUES (0),(1),(255);
INSERT INTO t VALUES (b'00000000'),(b'00000001'), (b'11111111');
请参阅http://sqlfiddle.com/#!2/4ff44/6以试验它们。
答案 1 :(得分:0)
我认为这可能对你有帮助, 使用php将二进制数据插入mysql 模式
CREATE TABLE `mydata` (
`id` INT UNSIGNED NOT NULL AUTO_INCREMENT,
`data` LONGBLOB NOT NULL,
`fname` VARCHAR(255) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE = InnoDB
在使用脚本
之前创建上表upload_file.php
<?php
if($_FILES['myfile']['tmp_name']!="")
{
if(mysql_connect("localhost","root",""))
{
if(mysql_select_db("mydb"))
{
$fname=$_FILES['myfile']['name'];
$tname = $_FILES['myfile']['tmp_name'];
$fsize = $_FILES['myfile']['size'];
$data=file_get_contents($tname);
//to escape all binary data which can make mysql mad
$data = mysql_real_escape_string($data);
if(mysql_query("Insert into mydata (data,fname) values('$data','$fname')"))
{
echo "File inserted successfully";
}
else
{
echo "Error occured ".mysql_error();
}
mysql_close();
}
}
}
?>
<form action="" method="post" enctype="multipart/form-data">
<input type="file" name="myfile">
<input type="submit" value="UPLOAD">
</form>
用法:upload_file.php
download_file.php
<?php
if(mysql_connect("localhost","root",""))
{
if(mysql_select_db("mydb"))
{
$id = (int)$_GET['id'];
$result=mysql_query("Select * from mydata where id = {$id}");
if($row=mysql_fetch_array($result))
{
Header( "Content-type: application/octet-stream");
Header( "Content-Disposition: inline; filename={$row['fname']}");
echo ($row['data']);
}
else
{
echo "File doesn't exist with above id";
}
}
}
?>