mysql大文件怎么存储 mysql表文件大小( 二 )


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.ibd27460580K -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 BEGINDECLARE i,cnt INT DEFAULT 0;SELECT COUNT(*) FROM tt_image1 WHERE 1 INTO cnt;WHILE icnt DOSET @stmt = CONCAT('select image_file from tt_image1limit ',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 来存放图片的例子,总的来说有以下三点:
占用磁盘空间大(这样会带来各种各样的功能与性能问题,比如备份,写入,读取操作等)
使用不易
还是推荐用文件路径来代替实际的文件内容存放
java注册用户mysql储存文件怎么放Java注册用户MySQL储存文件可以放在MySQL数据库中,即使用MySQL中的BLOB(Binary Large Object)类型来存储文件 。首先,需要创建一个存储文件的字段 , 类型为BLOB 。然后 , 使用Java代码将文件读取到字节数组中,最后使用PreparedStatement对象将字节数组插入到数据库中 。
如何使用mysql存储大文件设n个线程同时工作, 把文件份成n份,从n份mysql大文件怎么存储的起始位置开始读,读一部分保存一部分 。地n+1个线程读剩余mysql大文件怎么存储的文件并保存 。
如何把文件存放在mysql数据库中1、mysql如果使用myisam存储引擎mysql大文件怎么存储,数据库文件类型就包括.frm、.myd、.myimysql大文件怎么存储,默认存放位置是c:\documents
and
settings\all
users\application
data\mysql\mysql
server
5.1\data

推荐阅读