• 关于图片或者文件在数据库的存储方式归纳


    商品图片,用户上传的头像,其他方面的图片。目前业界存储图片有两种做法:

    1、  把图片直接以二进制形式存储在数据库中

    一般数据库提供一个二进制字段来存储二进制数据。比如mysql中有个blob字段。oracle数据库中是blob或bfile类型

    2、  图片存储在磁盘上,数据库字段中保存的是图片的路径。

    一、图片以二进制形式直接存储在数据库中

    第一种存储实现(php语言):

    大体思路:

    1、将读取到的图片用php程序转化成二进制形式。再结合insert into 语句插入数据表中的blob类型字段中去。

    3、  从数据库取出图片展示的时候。则是直接发送图片内容

    4、  

    $row=mysql_fetch_object($result); Header( "Content-type: image/gif"); echo $row->this_image;

    实现代码如下:

    $PicturePath = ‘/tmp/xxxjgjgj.jpg’;//假设这是上传的图片,php放在一个临时文件夹。脚本执行完毕后自动删除了。

    $imgStream = fread(fopen($PicturePath, "r");

    $blob_img = fread(fopen($imgStream, "r"), filesize($PicturePath));

    $sql =” INSERT INTO Images (this_image) VALUES ($blob_img)";

    注:this_image就是数据表中一个blob字段类型的字段

    ================取出展示图片代码

    $result=mysql_query("SELECT * FROM Images WHERE PicNum=$PicNum") or die("Cant perform Query"); $row=mysql_fetch_object($result); Header( "Content-type: image/gif"); echo $row-> this_image;

    总结:处理代码感觉还真比较麻烦。其实,我从来没用过在数据库中以二进制存储图片的做法。我们用得更多的是存储图片的路径,实际图片是在磁盘上保存的。

    据我了解,互联网环境中,大访问量,数据库速度和性能方面很重要。一般在数据库存储图片的做法比较少,更多的是将图片路径存储在数据库中,展示图片的时候只需要连接磁盘路径把图片载入进来即可。因为图片是属于大字段。一张图片可能1m到几m。

    有个原则:图片尽量不要存储在数据库中。这样的大字段数据会加重数据库的负担,拖慢数据库。在大并发访问的情况下很重要。这是一个经验。去看看dba对数据库性能调优方面的分析都能得到这个答案的:就是图片不要存储在数据库中。

  • 相关阅读:
    MySQL 编码:utf8 与 utf8mb4,utf8mb4_unicode_ci 与 utf8mb4_general_ci
    用 Redis 实现 PHP 的简单消息队列
    C 语言跟 C++ 的差异比较
    Redis -主从复制
    Redis
    Linux 下在后台运行进程:nohup,setsid,& 以及 tmux
    Linux 下的分屏利器-tmux安装、原理及使用
    理财型保险-不值得购买的保险
    常见的保险产品类别-年金保险、意外险
    签订保险合同后的事-续保、批单、退保、理赔
  • 原文地址:https://www.cnblogs.com/xlz307/p/3467816.html
Copyright © 2020-2023  润新知