mysql存储音频视频文件_如何在mysql 或者 其他的数据库中存放图片 音频 视频
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 或者 其他的数据库中存放图片 音频 视频相关推荐
- mysql 8重置root密码_如何在MySQL 8中重置root密码
MySQL中的用户密码存储在用户表中,密码重置实际上是改变该表中记录的值. 要在忘记密码的情况下更改密码,我们的想法是绕过MySQL的身份验证进入系统并使用SQL命令更新记录密码值. 在MySQL 5 ...
- mysql查询结果输出文件_如何将MySQL查询输出保存到文件?
mysql查询结果输出文件 We can use the MySQL outfile statement to save the query output into a file. This is v ...
- mysql按特定的顺序_如何在MySQL中按特定顺序排列数据?
使用ORDER BYIF()可以按特定顺序排列数据.以下是语法-select *from yourTableName ORDER BY IF(yourColumnName=yourValue1 OR ...
- mysql 千位分隔符号_如何在MySQL记录中放置千位分隔符?
FORMAT()为此使用方法.让我们首先创建一个表-mysql> create table DemoTable -> ( -> Amount DECIMAL(10,2) -> ...
- mysql外键约束脚本_如何在MySQL中设置外键约束
(1) 外键的使用: 外键的作用,主要有两个: 一个是让数据库自己通过外键来保证数据的完整性和一致性 一个就是能够增加ER图的可读性 有些人认为外键的建立会给开发时操作数据库带来很大的麻烦.因为数据库 ...
- mysql获得每条记录_如何在MySQL查询结果集中得到每条记录的行号
如果需要在查询语句返回的列中包含一列表示该条记录在整个结果集中的行号, ISO SQL:2003 标准提出的方法是提供 ROW_NUMBER() / RANK() 函数. Oracle 中可以使用标准 ...
- 如何打开mysql的批处理宫娥能_如何在MySQL中进行批处理插入
大话西游666 大多数情况下,您不是在MySQL客户机中工作,您应该使用适当的API将插入批处理到一起.例如,在JDBC中:connection con.setAutoCommit(false); P ...
- mysql时间排序最后一个_如何在MySQL中按日期排序,但最后放置空日期?
按日期排序,并借助ORDER BY子句和IS NULL属性设置最后一个空日期.语法如下:SELECT *FROM yourTableName ORDER BY (yourDateColumnName ...
- mysql排序规则英文 数字_如何在MySQL中为日语设置模式排序规则
我有整理问题.我想设置整理以支持日语.例如,当table.firstname具有"あ"时,带有"ぁ"的查询应返回记录.提前致谢. 解决方法: 这就像" ...
最新文章
- 福建省2013高职单招计算机类试题,13年福建-高职单招-计算机类试题及答案.doc
- 【OpenCV 4开发详解】Scharr算子
- 为什么插入数据普通PC比服务器更快?
- CentOS6实现路由器功能
- 如何选择国外虚拟主机空间服务商
- Java Web 项目SSO实战二之(win7 and Windows server 2008)
- 安装saltstack遇到的问题锦集
- 21天学通C语言-学习笔记(7)
- 计算机相关技术汇报ppt模板,计算机硕士开题报告ppt模板.doc
- matlab的比较器模块,simulink中的比较器
- VGG多种网络结构的搭建以及感受野的计算
- 图像标注的基础内容介绍
- python打开文件,路径存在'\t'被转义
- vue中使用element-ui时单元格内换行的问题
- 让人变年轻的特效怎么做?教你制作变年轻特效小妙招
- 《MySQL高级篇》三、存储引擎
- 地震--《孩子,快抓紧妈妈的手》
- mybatis-plus QueryWrapper 添加limit
- Python 跳出嵌套循环的5种方法
- 谷歌开发者大会,拳打苹果脚踢微软
热门文章
- Yahoo邮箱POP3设置方法
- 电机的分类与基本原理
- SpringBoot教程(14) JUnit5详解 断言 assertEquals assertSame assertThrows assertThat
- PMM 监控 MySQL
- Linux运维之LVS实现负载均衡的DR(直接路由)模式
- windows 10重装电脑后设置指纹提示已在其他账户上设置该指纹解决办法
- 台式台式计算机型号怎么看,戴尔台式电脑型号的查询方法
- win7系统服务器无法局域网访问,win7系统局域网无法访问怎么办?win7系统无法访问局域网两种解决方法...
- Flask奇妙探索之旅(一)之Hello,World
- 攻防世界 maze (也是南邮的maze)