blob存储大数据量的二进制文件时会丢失数据吗?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了blob存储大数据量的二进制文件时会丢失数据吗?相关的知识,希望对你有一定的参考价值。
望大虾救助啊》》》》》》》》》》》》》
参考技术A BLOB 类型 的最长字节是 65,535 字节 即 64KB 超过就是丢失了如果需要更大的存储空间, 可以用 MEDIUMBLOB (16MB) LONGBLOB(4GB) 这种大存储类型的本回答被提问者采纳
运用PDO存储将图片音频文件存入数据库
在数据库中创建表格的时候,有一个字段为image,用来保存图片,那么其类型就是blob,关于blob,百度百科是这样描述的
BLOB (binary large object),二进制大对象,是一个可以存储二进制文件的容器。
在计算机中,BLOB常常是数据库中用来存储二进制文件的字段类型。
BLOB是一个大文件,典型的BLOB是一张图片或一个声音文件,由于它们的尺寸,必须使用特殊的方式来处理(例如:上传、下载或者存放到一个数据库)。
根据Eric Raymond的说法,处理BLOB的主要思想就是让文件处理器(如数据库管理器)不去理会文件是什么,而是关心如何去处理它。
但也有专家强调,这种处理大数据对象的方法是把双刃剑,它有可能引发一些问题,如存储的二进制文件过大,会使数据库的性能下降。在数据库中存放体积较大的多媒体对象就是应用程序处理BLOB的典型例子。
将图片或者音频等文件存入数据库的原理,特别好理解,因为它们是文件,那么就可以用函数读,然后将读出的内容保存在字符串中,然后再讲该字符串存到数据库中。
数据库如下:
1 create table pic( 2 id tinyint primary key auto_increment not null, 3 image blob not null 4 )engine=myisam charset=utf8;
创建一个提交文件的表单,注意,提交文件的表单(form的属性method="post" enctype="multipart/form-data")
1 <form action="" method="post" enctype="multipart/form-data"> 2 <input type="file" name="pic" > 3 <input type="submit" name="submit"> 4 </form> 5 6 <?php 7 if(!empty($_POST)){ 8 try { 9 $pdo=new PDO("mysql:host=localhost;dbname=test","root","root"); 10 $pdo->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_EXCEPTION); 11 12 $statement=$pdo->prepare("insert into pic values (:id,:image)"); 13 14 //开始读文件 15 $fp=fopen($_FILES[‘pic‘][‘tmp_name‘],"rb"); 16 $content=""; 17 $content=fread($fp,filesize($_FILES[‘pic‘][‘tmp_name‘])); 18 fclose($fp); 19 20 $statement->execute(["id"=>1,"image"=>$content]); 21 echo "the picture has been saved\n"; 22 } catch (PDOException $e) { 23 echo "failed to save the picture"; 24 echo $e->getMessage(); 25 } 26 } 27 ?>
可以中途输出content的内容,或者运行完成后从数据库中查看添加的内容,然而你却看不懂内容是什么,全是乱码,但是,你成功将图片保存到了数据库。
接下来,你可以将数据库中的图片“数据”,读出来,然后再以图片的形式展示一下,看是不是已提交的那张图片,代码如下:
1 <?php 2 try { 3 $pdo=new PDO("mysql:host=localhost;dbname=test","root","root"); 4 $pdo->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_EXCEPTION); 5 $statement=$pdo->prepare("select * from pic"); 6 $statement->execute(); 7 list($id,$image)=$statement->fetch(PDO::FETCH_NUM); 8 header("Content-Type:image/png"); 9 echo $image; 10 } catch (PDOException $e) { 11 echo "failed to open the picture"; 12 echo $e->getMessage(); 13 } 14 ?>
以上是关于blob存储大数据量的二进制文件时会丢失数据吗?的主要内容,如果未能解决你的问题,请参考以下文章
计算机术语blob是什么东西?( binary large object,二进制大对象,是一个可以存储二进制文件的容器)(典型的BLOB是一张图片或一个声音文件)