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 手机类型_mysql 手机号存储类型

    {"moduleinfo":{"card_count":[{"count_phone":1,"count":1}],&q ...

  2. SAP WM 确定WM移动类型配置里'存储地点参考'优先级高于'特殊移动标记'

    SAP WM 确定WM移动类型配置里'存储地点参考'优先级高于'特殊移动标记' 我们有定义如下的storage location reference: 在如下的Assign WM movement t ...

  3. java将图片保存进mysql_Java存储图片到Mysql

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 [1]视图层 action="${ctx}/web/UserInforServlet?method=userInforServlet" ...

  4. mysql高精度类型_mysql中常见的数据类型

    2.浮点数 如果希望保证值比较准确,推荐使用定点数数据类型.MySql中的浮点类型有float,double和real.他们定义方式为:FLOAT(M,D) . REAL(M,D) . DOUBLE ...

  5. mysql timestamp 类型_MySQL中“诡异”的TIMESTAMP数据类型

    注意:从5.6.4版本开始,TIME,TIMESTAMP,DATTIME这三种类型增加了对小数秒的支持,timestamp存储大小为4Bytes+小数部分:datetime存储大小为5Bytes+小数 ...

  6. mysql 空间 类型_MySQL空间类型测试

    Mysql空间类型介绍: MySQL支持空间扩展,允许生成.保存和分析地理特征.这些特征可用于MyISAM.InnoDB.NDB.BDB和ARCHIVE表(但是,ARCHIVE引擎不支持索引功能,因此 ...

  7. mysql yintint类型_MySQL服务器2 被嫌弃的胖子

    1.sql的基本语法 对数据库 create database db1; 创建数据库 对表: create database t1(id int,name char(10)); 创建表 show cr ...

  8. mysql bit类型_MySQL bit类型

    本教程将向您介绍如何存储和使用位值的MySQL BIT数据类型. MySQL BIT数据类型简介 MySQL提供了允许您存储位值的BIT类型.BIT(m)可以存储多达m位的值,m的范围在1到64之间. ...

  9. mysql存中文_mysql数据库存储中文数据的解决办法

    我在学习django中admin模块的时候,登录进入后台操作页面,输入中文数据,但保存之后全是乱码(全是"????????????"),然后就开始了解决问题之路. 1.首先百度搜索 ...

最新文章

  1. (一)检测浏览器是否支持websocket
  2. Go Web 开发(一)
  3. GDB调试器使用总结
  4. 【HDU6701】Make Rounddog Happy【权值线段树+双向单调队列】
  5. 激光点云格式转换 bin-to-pcd
  6. 如何打开屏幕坏的手机_每天打开手机屏幕20次?打开10次以上的朋友进~
  7. 转:多条件查询测试用例设计方法——pairwise
  8. 笨方法“学习python笔记之循环
  9. Hudson Jameson将在柏林硬分叉后卸任以太坊基金会社区经理
  10. python-PyQuery详解
  11. 邮件策略在域树中的实战应用:Exchange2003系列之十
  12. IPhone开发从零开始之1-构思你的产品
  13. VMware Cloud Director 10.4 发布 (含下载) - 云计算调配和管理平台
  14. python做语音识别
  15. 使用百度图像识别时,提示错误“No address associated with hostname”
  16. USACO 2018 February Contest, Silver-Rest Stops
  17. MFC基本图形的绘制(一)设备环境类CDC、画笔和画刷
  18. 4k显示器用html好还是dp,4k显示器用hdmi还是dp
  19. 安装Mosquitto学习MOTT协议
  20. 线阵相机参数设置和原理解释 (转载)很棒。

热门文章

  1. 常见网络攻击方式介绍及短信防攻击策略的后端实现
  2. 浅谈企业引入设备巡检管理系统的必要性
  3. 模块格式:CommonJS AMD CMD UMD ES6
  4. MYSQL数据库命令+操作----最详细的操作教程(测试木头人)
  5. python播放网络音乐_Python实现在线音乐播放器示例
  6. 配置Grade 依赖和搜索Maven库
  7. [Robust Tracking]视频跟踪MEEM — 多专家模型
  8. 发送缓冲区sk_wmem_queued
  9. 有史以来批处理最完整人性化教程1
  10. Java并发之AQS详解(文章里包含了两片文章结合着看后边文章不清楚,请看原文)