在mysql中blob是乙個二進位制的物件,它是乙個可以儲存大量資料的容器(如,**等等),且能容納不同大小的資料,在mysql中有四種blob型別,他們的區別就是可以容納的資訊量不容分別是以下四種:
①tinyblob型別 最大能容納255b的資料
②blob型別 最大能容納65kb的
③mediumblob型別 最大能容納16mb的資料
④longblob型別 最大能容納4gb的資料
而在我們實際使用的時候,可以根據自己的需求選擇這幾種型別,但是如果blob中儲存的檔案的大小過大的話,會導致資料庫的效能很差。下面具體介紹一下插入blob型別的資料以及讀取blob型別的資料的方式:
1、插入blob型別的資料
插入blob型別的資料時,需要注意必須要用preparedstatement,因為blob型別的資料是不能夠用字串來拼的,在傳入了sql語句後,就需要去呼叫preparedstatement物件中的setblob(int index , inputstream in)方法來設定傳入的的引數,其中index表示blob型別的資料所對應的佔位符(?)的位置,而inputstream型別的in表示被插入檔案的節點流。
2、讀取blob型別的資料
讀取blob型別相對來說比較容易,當獲取了查詢的結果集之後,使用getblob()方法讀取到blob物件,然後呼叫blob的getbinarystream()方法得到輸入流,再使用io操作進行檔案的寫入操作即可。
下面是具體例子來實現blob型別資料的插入和讀取操作:
現在本地資料庫中有這樣乙個表animal,其中picture中存放的資料型別為mediumblob型別
貼上自己試驗的**
# 向資料庫插入資料
for i, key in enumerate(list(update_container.keys())):
value = update_container[key].value
value_str = value.tostring()
shape = value.shape
sql = 'insert into face_emb(uid, shape, emb) values (%s, %s, %s)'
test_mysql.executesqlmanybyconn(sql, [key, str(shape[0]), value_str])
# 從資料庫讀取資料,轉換成需要格式
sql = 'select * from face_emb'
s = test_mysql.executesqlbyconn(sql)
print(s)
s1 = s.fetchall()
for i in range(len(s1)):
userid, shape, emb_bytes = s1[i]
tmb_list = np.fromstring(emb_bytes, dtype=np.float32)
emb = tmb_list.reshape(shape, -1)
print(emb.shape)
MySQL中的BLOB型別
blob介紹 blob binary large object 二進位製大物件,是乙個可以儲存二進位制檔案的容器。在計算機中,blob常常是資料庫中用來儲存二進位制檔案的字段型別。blob是一 說法,處理blob的主要思想就是讓檔案處理器 如資料庫管理器 不去理會檔案是什麼,而是關心如何去處理它。但...
MySQL中的BLOB型別
1 mysql有四種blob型別 2 除了型別對後面訪問檔案大小有限制,還要修改mysql的配置檔案。windows linux基本一樣通過修改檔案my.ini或my.cnf檔案,在檔案中增加 max allowed packet 10m 就是最大10m,mysql預設似乎1mb,增加前先查詢一下確...
MySQL中的BLOB型別
blob介紹 blob binary large object 二進位製大物件,是乙個可以儲存二進位制檔案的容器。在計算機中,blob常常是資料庫中用來儲存二進位制檔案的字段型別。blob是一 說法,處理blob的主要思想就是讓檔案處理器 如資料庫管理器 不去理會檔案是什麼,而是關心如何去處理它。但...