當前位置:首頁 » 存儲配置 » mysql存儲圖片

mysql存儲圖片

發布時間: 2022-01-08 17:52:39

A. mysql能存放圖片嗎

sql 操作的都是表會視圖,裡面的數據,相信你也沒看見過有圖片保存在裡面。保存的都是圖片名,路徑。它是告訴你怎麼找到這張圖片---- 這句話是錯的。一般可以保存二進制的信息blob類型。

當時還是太嫩了抱歉。

B. mysql圖片存儲

這是因為你使用漢字作為文件或者目錄的名字,建議不要這樣做,因為漢字在不同編碼下的二進制是不同的

補充:
那粘貼你的代碼看看,\xff這樣代碼明顯是漢字搞的。

C. 請問在mysql中怎麼存儲圖片呢

我一般是保存圖片地址,查詢資料庫獲得圖片在硬碟的位置,通過其他方式顯示圖片

相對路徑就不太清楚了,您可以試試設置環境變數,或者%HOME%之類的代碼

D. 如何想Mysql資料庫中存儲圖片

兩種,一種是將圖片轉化成二進制數據流存入資料庫中。一種是保存圖片的路徑,然後前台讀取路徑去調用圖片。相關的代碼網路一下應該會有,第二種方法實現上比較簡單,就是存儲路徑,然後根據路徑讀取對應的圖片顯示出來。第一種就比較麻煩,要先把圖片轉化成二進制數據,讀取時就是從資料庫讀取對應數據再轉化成圖片顯示出來。

E. 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.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 mpfile ''/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 來存放圖片的例子,總的來說有以下三點:

  • 佔用磁碟空間大(這樣會帶來各種各樣的功能與性能問題,比如備份,寫入,讀取操作等)

  • 使用不易

  • 還是推薦用文件路徑來代替實際的文件內容存放

F. mysql里怎麼存放圖片

你好,很高興回答你的問題。
一般有兩種方式,
一種是將圖片序列化後,將序列化的結果存入資料庫中。使用時在讀出進行反序列化。
另一種是將文件存放到一個位置,將存放的路徑存入資料庫。使用時按照路徑獲取圖片。
如果有幫助到你,請點擊採納。

G. mysql存圖片麻煩嗎 用什麼欄位存

方法一:

把照片放進資料庫,照片的格式最好是bmp,這樣就可以在窗體上顯示出來,不過這樣資料庫的體積會暴增。

詳細的使用方法請參考Access幫助中的 PictureData 屬性(本文末尾有相關幫助)。

而且,你可以直接用 commdlg API 函數來給圖像框賦值,然後直接讀取某個圖像框的 PICTUREDATA 並存儲到某個 IMAGE 欄位中。這樣做的優點是顯示、讀取方便,缺點是如果圖片精度高,佔用的硬碟空間會爆大。

詳細示例請參考:

http://access911.net/down/eg/OLEfieldAndPictureData.rar

方法二:

設一個OLE欄位,然後插入對象就行了(對著欄位單擊右鍵)。但是要注意的是,用上述方法加入資料庫的圖片只能以手動方式保存,需要用程序讀取的時候會碰到存儲在ole欄位中二進制數據與源文件不符的情況。主要是因為ole引擎在圖片的前面加了一段信息給他自己用。

請參考:

http://access911.net/index.asp?board=4&mode=3&recordid=75FAB21E12DC

方法三:

將圖片文件以二進制方式存儲在資料庫中,使用時調用。詳細情況請參考:

使用 ADO 的 STREAM 對象的 LoadFromFile 方法以及 SaveToFile 方法實現:

http://access911.net/index.asp?board=4&mode=3&recordid=74FAB51E13DC

使用 ADO 的 RECORDSET.FIELD 對象的 GetChunk 以及 AppendChunk 方法實現:

http://access911.net/index.asp?board=4&mode=3&recordid=75FAB01E

ASP 中使用的方法:

http://access911.net/index.asp?board=4&mode=3&recordid=79FAB31E

下列常式就是採用這種方法,在顯示的時候把長二進制數據保存為臨時文件用於顯示

http://access911.net/down/photo.rar

方法四:

不把照片放入資料庫,只把照片的路徑保存到資料庫中,動態載入,這樣可以支持很多種圖片格式。作法是在窗體上放一個圖像控制項,然後根據員工編號或別的有關聯的欄位去找出路徑,用以下語句來載入圖像:

圖像1.Picture =路徑名

路徑名必須包括圖象文件名。

詳細情況你可以參考 access xp 的示例 northwind.mdb 中的雇員窗體

你也可以參考:http://access911.net/down/eg/LinkPicture.rar

熱點內容
安卓機怎麼關閉主題 發布:2024-12-26 21:55:57 瀏覽:913
javafor線程 發布:2024-12-26 21:54:35 瀏覽:741
python自定義模塊 發布:2024-12-26 21:41:37 瀏覽:55
linux安裝mysqltar 發布:2024-12-26 21:18:02 瀏覽:315
瀏覽器的java支持 發布:2024-12-26 21:15:45 瀏覽:653
電商高管如何配置 發布:2024-12-26 21:13:48 瀏覽:707
批發的演算法 發布:2024-12-26 21:13:46 瀏覽:206
安卓手機在日本下載哪個導航 發布:2024-12-26 21:09:32 瀏覽:558
白雜訊加密 發布:2024-12-26 20:31:02 瀏覽:639
怎麼防止電腦刪除腳本 發布:2024-12-26 20:19:19 瀏覽:151