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存储音频视频文件_如何在mysql 或者 其他的数据库中存放图片 音频 视频相关推荐

  1. mysql 8重置root密码_如何在MySQL 8中重置root密码

    MySQL中的用户密码存储在用户表中,密码重置实际上是改变该表中记录的值. 要在忘记密码的情况下更改密码,我们的想法是绕过MySQL的身份验证进入系统并使用SQL命令更新记录密码值. 在MySQL 5 ...

  2. mysql查询结果输出文件_如何将MySQL查询输出保存到文件?

    mysql查询结果输出文件 We can use the MySQL outfile statement to save the query output into a file. This is v ...

  3. mysql按特定的顺序_如何在MySQL中按特定顺序排列数据?

    使用ORDER BYIF()可以按特定顺序排列数据.以下是语法-select *from yourTableName ORDER BY IF(yourColumnName=yourValue1 OR ...

  4. mysql 千位分隔符号_如何在MySQL记录中放置千位分隔符?

    FORMAT()为此使用方法.让我们首先创建一个表-mysql> create table DemoTable -> ( -> Amount DECIMAL(10,2) ->  ...

  5. mysql外键约束脚本_如何在MySQL中设置外键约束

    (1) 外键的使用: 外键的作用,主要有两个: 一个是让数据库自己通过外键来保证数据的完整性和一致性 一个就是能够增加ER图的可读性 有些人认为外键的建立会给开发时操作数据库带来很大的麻烦.因为数据库 ...

  6. mysql获得每条记录_如何在MySQL查询结果集中得到每条记录的行号

    如果需要在查询语句返回的列中包含一列表示该条记录在整个结果集中的行号, ISO SQL:2003 标准提出的方法是提供 ROW_NUMBER() / RANK() 函数. Oracle 中可以使用标准 ...

  7. 如何打开mysql的批处理宫娥能_如何在MySQL中进行批处理插入

    大话西游666 大多数情况下,您不是在MySQL客户机中工作,您应该使用适当的API将插入批处理到一起.例如,在JDBC中:connection con.setAutoCommit(false); P ...

  8. mysql时间排序最后一个_如何在MySQL中按日期排序,但最后放置空日期?

    按日期排序,并借助ORDER BY子句和IS NULL属性设置最后一个空日期.语法如下:SELECT *FROM yourTableName ORDER BY (yourDateColumnName  ...

  9. mysql排序规则英文 数字_如何在MySQL中为日语设置模式排序规则

    我有整理问题.我想设置整理以支持日语.例如,当table.firstname具有"あ"时,带有"ぁ"的查询应返回记录.提前致谢. 解决方法: 这就像" ...

最新文章

  1. 福建省2013高职单招计算机类试题,13年福建-高职单招-计算机类试题及答案.doc
  2. 【OpenCV 4开发详解】Scharr算子
  3. 为什么插入数据普通PC比服务器更快?
  4. CentOS6实现路由器功能
  5. 如何选择国外虚拟主机空间服务商
  6. Java Web 项目SSO实战二之(win7 and Windows server 2008)
  7. 安装saltstack遇到的问题锦集
  8. 21天学通C语言-学习笔记(7)
  9. 计算机相关技术汇报ppt模板,计算机硕士开题报告ppt模板.doc
  10. matlab的比较器模块,simulink中的比较器
  11. VGG多种网络结构的搭建以及感受野的计算
  12. 图像标注的基础内容介绍
  13. python打开文件,路径存在'\t'被转义
  14. vue中使用element-ui时单元格内换行的问题
  15. 让人变年轻的特效怎么做?教你制作变年轻特效小妙招
  16. 《MySQL高级篇》三、存储引擎
  17. 地震--《孩子,快抓紧妈妈的手》
  18. mybatis-plus QueryWrapper 添加limit
  19. Python 跳出嵌套循环的5种方法
  20. 谷歌开发者大会,拳打苹果脚踢微软

热门文章

  1. Yahoo邮箱POP3设置方法
  2. 电机的分类与基本原理
  3. SpringBoot教程(14) JUnit5详解 断言 assertEquals assertSame assertThrows assertThat
  4. PMM 监控 MySQL
  5. Linux运维之LVS实现负载均衡的DR(直接路由)模式
  6. windows 10重装电脑后设置指纹提示已在其他账户上设置该指纹解决办法
  7. 台式台式计算机型号怎么看,戴尔台式电脑型号的查询方法
  8. win7系统服务器无法局域网访问,win7系统局域网无法访问怎么办?win7系统无法访问局域网两种解决方法...
  9. Flask奇妙探索之旅(一)之Hello,World
  10. 攻防世界 maze (也是南邮的maze)