2017-09-07 59 views
0

我想保存二进制字符串以节省MySQL数据库中的空间。但是,我无法正确检索二进制数据,所以我做错了什么?PHP MySQL将二进制字符串保存到BLOB字段中无法检索二进制值

我有这样一个数据库:

CREATE TABLE `Test` (
    ID INT NOT, 
    Value BLOB 
    ); 

我喜欢的语句插入数据:

INSERT INTO `Test` (ID, Value) VALUES(1, b'10000001'); 

但是,我不能检索二进制字符串时,我从插入的选择值用下面的查询排:

SELECT * FROM `Test`; //NOT WORKING. Returns Value=0 
SELECT ID, BIN(Value) FROM `Test`; //NOT WORKING. Returns Value=0 

我该用什么?我已经尝试在我的查询中使用BIN(Value),如上所示,但没有任何成功。提前致谢。

+0

'VALUES(1,b'10000001''如果这是您的实际查询,它失败了。为什么在那里和外部有一个'b'值? –

+0

@ Fred-ii-,告诉数据库它是一个二进制值?我在互联网上看到,不知道或者它是正确的,但我不能得到任何解决方案的工作..? –

+0

你可能是正确的。你标记为PHP虽然,是否有相关的代码呢?当你在phpmyadmin(或类似的)中运行这个函数,它抛出了什么错误?这对我来说不清楚,ID NOT NOT,'NOT',我以前从未见过。 –

回答

1

用1和0的文本字符串开始是非常奇怪的,但是:

$ones_and_zeroes = '10000001'; 

// If you have a literal string of ones and zeroes that you need to convert 
// to an actual number there's base_convert() 

$hex_string = base_convert($ones_and_zeroes, 2, 16); 

// $hex_string is now "81" 

// you can convert this to an *actual* binary string with hex2bin() 
$bin = hex2bin($hex_string); 

// $bin now contains the byte 0x81 

// now if you want to do it right: 
$dbh = new PDO(...); 
$stmt = $dbh->prepare('INSERT INTO `Test` (ID, Value) VALUES(1, :bin)'); 
$stmt->execute(['bin'=>$bin]); 

// or whatever the gross mysqli equivalent is. 

我不打算告诉你如何在PHP做,但你想手动编写此查询这将是:

INSERT INTO `Test` (ID, Value) VALUES(1, 0x81); 

与“0X”前缀的十六进制编码的数据是唯一的SA fe [我知道]将二进制数据嵌入到文本查询中,尽管如此,最好使用预先准备好的语句,因为像这样的十六进制编码数据会使长度加倍。

0

最好的建议是检查插入查询是否成功运行,即使用任何MySQL管理工具将预期数据插入到数据库中。
只有这样,你可以找出问题是否与检索或插图本身