怎么把图片存入mysql 怎么把图片存入微信表情包

请问在mysql中怎么存储图片呢?背景
MySQL 一直以来都有 TEXT、BLOB 等类型用来存储图片、视频等大对象信息 。比如一张图片,随便一张都 5M 以上 。视频也是,随便一部视频就是 2G 以上 。
假设用 MySQL 来存放电影视频等信息,一部是 2G,那么存储 1000 部就是 2TB , 2TB 也就是 1000 条记录而已,但是对数据库性能来说,不仅仅是看记录数量,更主要的还得看占用磁盘空间大小 。空间大了,所有以前的经验啥的都失效了 。
所以一般来说存放这类信息 , 也就是存储他们的存放路径 , 至于文件本身存放在哪里,那这就不是数据库考虑的范畴了 。数据库只关心怎么来的快,怎么来的小 。
举例
虽然不推荐 MySQL 这样做,但是也得知道 MySQL 该怎么做才行,做到心里有数 。比如下面一张微信图片 , 大概 5M 的样子 。
root@ytt:/var/lib/mysql-files# ls -sihl 微信图片_20190711095019.jpg274501 5.4M -rw-r--r-- 1 root root 5.4M Jul 11 07:17 微信图片_20190711095019.jpg
拷贝 100 份这样的图片来测试
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.jpg17.jpg25.jpg33.jpg41.jpg4.jpg58.jpg66.jpg74.jpg82.jpg90.jpg99.jpgf8.tsv
10.jpg18.jpg26.jpg34.jpg42.jpg50.jpg59.jpg67.jpg75.jpg83.jpg91.jpg9.jpg微信图片_20190711095019.jpg
1111.jpg19.jpg27.jpg35.jpg43.jpg51.jpg5.jpg68.jpg76.jpg84.jpg92.jpgf1.tsv
11.jpg1.jpg28.jpg36.jpg44.jpg52.jpg60.jpg69.jpg77.jpg85.jpg93.jpgf2.tsv
12.jpg20.jpg29.jpg37.jpg45.jpg53.jpg61.jpg6.jpg78.jpg86.jpg94.jpgf3.tsv
13.jpg21.jpg2.jpg38.jpg46.jpg54.jpg62.jpg70.jpg79.jpg87.jpg95.jpgf4.tsv
14.jpg22.jpg30.jpg39.jpg47.jpg55.jpg63.jpg71.jpg7.jpg88.jpg96.jpgf5.tsv
15.jpg23.jpg31.jpg3.jpg48.jpg56.jpg64.jpg72.jpg80.jpg89.jpg97.jpgf6.tsv
16.jpg24.jpg32.jpg40.jpg49.jpg57.jpg65.jpg73.jpg81.jpg8.jpg98.jpgf7.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

推荐阅读