root@ytt:/var/lib/mysql-files# for i in `seq 1 100`; do cp 微信图片_20190711095019.jpg "$i".jpg;done;

root@ytt:/var/lib/mysql-files# ls

100.jpg   17.jpg  25.jpg  33.jpg  41.jpg  4.jpg   58.jpg  66.jpg  74.jpg  82.jpg  90.jpg  99.jpg  f8.tsv

10.jpg    18.jpg  26.jpg  34.jpg  42.jpg  50.jpg  59.jpg  67.jpg  75.jpg  83.jpg  91.jpg  9.jpg   微信图片_20190711095019.jpg

1111.jpg  19.jpg  27.jpg  35.jpg  43.jpg  51.jpg  5.jpg   68.jpg  76.jpg  84.jpg  92.jpg  f1.tsv

11.jpg    1.jpg   28.jpg  36.jpg  44.jpg  52.jpg  60.jpg  69.jpg  77.jpg  85.jpg  93.jpg  f2.tsv

12.jpg    20.jpg  29.jpg  37.jpg  45.jpg  53.jpg  61.jpg  6.jpg   78.jpg  86.jpg  94.jpg  f3.tsv

13.jpg    21.jpg  2.jpg   38.jpg  46.jpg  54.jpg  62.jpg  70.jpg  79.jpg  87.jpg  95.jpg  f4.tsv

14.jpg    22.jpg  30.jpg  39.jpg  47.jpg  55.jpg  63.jpg  71.jpg  7.jpg   88.jpg  96.jpg  f5.tsv

15.jpg    23.jpg  31.jpg  3.jpg   48.jpg  56.jpg  64.jpg  72.jpg  80.jpg  89.jpg  97.jpg  f6.tsv

16.jpg    24.jpg  32.jpg  40.jpg  49.jpg  57.jpg  65.jpg  73.jpg  81.jpg  8.jpg   98.jpg  f7.tsv

我们建三张表,分别用 LONGBLOB、LONGTEXT 和 VARCHAR 来存储这些图片信息

mysql> show create table tt_image1G

*************************** 1. row ***************************

Table: tt_image1

Create Table: CREATE TABLE `tt_image1` (

`id` int(11) NOT NULL AUTO_INCREMENT,

`image_file` longblob,

PRIMARY KEY (`id`)

) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci

1 row in set (0.00 sec)

mysql> show create table tt_image2G

*************************** 1. row ***************************

Table: tt_image2

Create Table: CREATE TABLE `tt_image2` (

`id` int(11) NOT NULL AUTO_INCREMENT,

`image_file` longtext,

PRIMARY KEY (`id`)

) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci

1 row in set (0.00 sec)

mysql> show create table tt_image3G

*************************** 1. row ***************************

Table: tt_image3

Create Table: CREATE TABLE `tt_image3` (

`id` int(11) NOT NULL AUTO_INCREMENT,

`image_file` varchar(100) DEFAULT NULL,

PRIMARY KEY (`id`)

) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci

1 row in set (0.00 sec)

我们来给三张表插入 100 张图片(插入前,建议把 max_allowed_packet 设置到最大)

tt_image1

root@ytt:/var/lib/mysql-files# for i in `seq 1 100`;

do mysql -S /var/run/mysqld/mysqld.sock -e "insert into ytt.tt_image1(image_file)

values (load_file('/var/lib/mysql-files/$i.jpg'))";done;

tt_image2

root@ytt:/var/lib/mysql-files# for i in `seq 1 100`;

do mysql -S /var/run/mysqld/mysqld.sock -e "insert into ytt.tt_image2(image_file)

values (hex(load_file('/var/lib/mysql-files/$i.jpg')))";done;

tt_image3

root@ytt:/var/lib/mysql-files# aa='begin;';for i in `seq 1 100`;

do aa=$aa"insert into ytt.tt_image3(image_file) values

('/var/lib/mysql-files/$i.jpg');";

done;aa=$aa'commit;';mysql -S /var/run/mysqld/mysqld.sock -e "`echo $aa`";

检查下三张表记录数

mysql> select 'tt_image1' as name ,count(*) from tt_image1 union allselect 'tt_image2',count(*) from tt_image2 union all select 'tt_image3', count(*) from tt_image3;+-----------+----------+| name      | count(*) |+-----------+----------+| tt_image1 |      100 || tt_image2 |      100 || tt_image3 |      100 |+-----------+----------+3 rows in set (0.00 sec)

看下文件大小,可以看到实际大小排名,LONGTEXT 字段存储的最大,LONGBLOB 字段缩小到一半,最小的是存储图片路径的表 tt_image3。所以这里从存储空间来看,存放路径最占优势。

root@ytt:/var/lib/mysql/ytt# ls -silhS tt_image*274603 1.1G -rw-r----- 1 mysql mysql 1.1G Jul 11 07:27 tt_image2.ibd274602 545M -rw-r----- 1 mysql mysql 544M Jul 11 07:26 tt_image1.ibd274605  80K -rw-r----- 1 mysql mysql 112K Jul 11 07:27 tt_image3.ibd

那么怎么把图片取出来呢?

tt_image3 肯定是最容易的

mysql> select * from tt_image3;+----+----------------------------+| id | image_file                 |+----+----------------------------+|  1 | /var/lib/mysql-files/1.jpg |+----+----------------------------+...100 rows in set (0.00 sec)

tt_image1 直接导出来二进制文件即可,下面我写了个存储过程,导出所有图片。

mysql> DELIMITER $$mysql> USE `ytt`$$mysql> DROP PROCEDURE IF EXISTS `sp_get_image`$$mysql> CREATE DEFINER=`ytt`@`localhost` PROCEDURE `sp_get_image`()mysql> BEGIN      DECLARE i,cnt INT DEFAULT 0;      SELECT COUNT(*) FROM tt_image1 WHERE 1 INTO cnt;      WHILE i < cnt DO        SET @stmt = CONCAT('select image_file from tt_image1  limit ',i,',1 into dumpfile ''/var/lib/mysql-files/image',i,'.jpg''');        PREPARE s1 FROM @stmt;        EXECUTE s1;        DROP PREPARE s1;      SET i = i + 1;      END WHILE;      END$$mysql> DELIMITER ;mysql> call sp_get_image;

tt_image2 类似,把 select 语句里 image_file 变为 unhex(image_file) 即可。

总结

这里我举了个用 MySQL 来存放图片的例子,总的来说有以下三点:

占用磁盘空间大(这样会带来各种各样的功能与性能问题,比如备份,写入,读取操作等)

使用不易

还是推荐用文件路径来代替实际的文件内容存放

mysql 用数据库存储视频文件_如何用SQL数据库存放视频相关推荐

  1. 数据库mdf和ldf文件_如何将SQL数据库文件(MDF和LDF)移动到另一个位置

    数据库mdf和ldf文件 How often you got to the point that for any reason you don't have enough space on the s ...

  2. mysql注入如何读取本地文件_如何通过SQL注入获取服务器本地文件

    写在前面的话 SQL注入可以称得上是最臭名昭著的安全漏洞了,而SQL注入漏洞也已经给整个网络世界造成了巨大的破坏.针对SQL漏洞,研究人员也已经开发出了多种不同的利用技术来实施攻击,包括非法访问存储在 ...

  3. mysql二进制大文件_Mysql实例Mysql LONGTEXT 类型存储大文件(二进制也可以) (修改+调试+整理)...

    <Mysql实例Mysql LONGTEXT 类型存储大文件(二进制也可以) (修改+调试+整理)>要点: 本文介绍了Mysql实例Mysql LONGTEXT 类型存储大文件(二进制也可 ...

  4. 局域网访问mysql失败_连接局域网sql数据库服务器失败

    SQL数据库学习之路(八) 数据库介绍: 在网页上的主程序中进行注册操作,然后把数据发送给人,人传递这些数据到数据库当中. 为什么学ADO.NET:之前我们所学的只能在查询分析器中查看数据,操作数据. ...

  5. 将DAT格式视频文件转换成ASF和WMV格式视频文件

    以*.ASF和*.WMV为后缀名的视频文件,是微软针对RM格式视频文件而产生的,它们也是WindowsMedia的核心.它们的共同特点是采用MPEG-4压缩算法,所以压缩率和图像的质量都很不错(只比V ...

  6. java删除数据库表格,《Java:数据库更新excel文件的数据同时删除数据库原来的数据》 excel表格如何删除相同数据库...

    Java:数据库更新excel文件的数据同时删除数据库原来的数据 重新写入blob的byte[],就可以覆盖了....... excel表格怎么检查有重复的数据库 方/步骤 打开需要编辑的Excel表 ...

  7. 使用 DMV 进行监视_监视资源使用情况(1)_针对 Azure SQL 数据库和 Azure SQL 托管实例进行手动性能优化

    本文适用:AZURE SQL数据库 AZURE SQL数据库/托管实列,由于引入PORTAL等管理工具的概念,所以在监视资源上面我们的手段就比较多样化了,在本篇以及接下来的后续篇章中会详细展开,敬请期 ...

  8. 转载--SQL还原数据库后孤立用户问题处理(SQL 数据库 拥有对象 无法删除)

    SQL还原数据库后孤立用户问题处理(SQL 数据库 拥有对象 无法删除) 所谓孤立帐户,就是某个数据库的帐户只有用户名而没有登录名,这样的用户在用户库的sysusers系统表中存在,而在master数 ...

  9. mysql数据库重做日志文件_数据库:mysql:重做日志文件(redo log file)

    一.重做日志缓冲(redo log buffer) 1. log block 在InnoDB存储引擎中,重做日志都是以512字节进行存储的.这意味着重做日志缓存.重做日志文件都是以块(block)的方 ...

最新文章

  1. “;“分号空语句的使用
  2. Swift 注释规范和文档注释
  3. kafka副本数据同步策略
  4. socket编程学习笔记
  5. wps的计算机在哪里设置密码,wps文件怎么设置和取消密码 wps文件密码设置和取消的步骤方法...
  6. java ftp 损坏_java ftp上传时断网,文件损坏
  7. 如何制作macOS Monterey启动U盘
  8. Eclipse 快捷键的使用
  9. 详解rem布局-利用rem布局实现移动端高清显示
  10. 取消计算机触摸板,笔记本电脑触摸板,详细教您笔记本电脑触摸板怎么关闭
  11. 小屏幕android电视,神奇!只需一个方法,让电视当作手机屏幕!
  12. 黑盒测试测试用例__判定表
  13. 均值场博弈_平均场博弈(mean field game)
  14. 虚拟机linux ecap文件在,为AM335x移植Linux内核主线代码(30)eCAP的PWM波功能
  15. RK3288方案开发,RK3288开发板方案,RK3288平板芯片参数资料
  16. Altium Designer14安装教程及注意事项
  17. 计算机学院毕业设计文化衫,超全毕业文化衫创意设计图案与素材整理!2017毕业班服设计图案!...
  18. 英语基础-主语、宾语、表语、同位语
  19. linux下float的寄存器,检测x86上Linux的非正常浮动操作(Detecting denormal float operations on Linux for x86)...
  20. 编程规范 写 if 语句不要任性

热门文章

  1. 我的编程能力是从什么时候开始突飞猛进的?
  2. 股票的科创板,新三板,创业板到底哪个能让你赚钱
  3. 关于MD5破解这件事
  4. python试卷生成_Python学习笔记文件读写之生成随机的测试试卷文件
  5. python连续读取邮件_Python读取指定日期邮件的实例
  6. Google十大真理带给中国网络公司的启示
  7. 未给员工足额缴纳公积金!董明珠曾豪言:每人一套房不需要公积金
  8. 4月8日及以后火车票暂停发售!
  9. 芒果超媒2021年净利润21亿元 芒果TV会员数达5040万
  10. 快狗打车通过港交所上市聆讯