使用 MySQL 创建强大的图片数据库 (图片数据库 mysql)

随着数字设备的普及以及网络带宽的提升,图片这种多媒体资源的使用越来越广泛。无论是网站、移动应用还是其他数字媒体产品,都需要使用大量的图片。而对于图片资源的管理,则需要建立一套图片数据库来进行管理和维护。本文将介绍如何使用 MySQL 创建一套强大的图片数据库。

之一步:确定数据库需求

在开始创建数据库前,首先需要确定数据库的需求。图片数据库需要包含哪些信息?如何保存和管理这些信息?以下是图片数据库需要包含的信息:

1. 图片名称:图片的名称,用于识别图片和提供给用户查找使用。

2. 图片分类:为了方便用户查找和管理,每张图片都需要进行分类,例如文章插图、产品图片或者广告图片等。

3. 图片描述: 图片描述应该提供图片所呈现的信息,包含图片的主题、角色和场景等,以及其他需要的数据。

4. 图片尺寸:图片文件的尺寸,包括图片的宽度和高度,以及图片的像素数。

5. 图片来源:图片的来源,可以是用户上传、网站采集或者外部供应商提供的。

6. 图片格式:图片文件的格式,包括 JPEG、PNG、GIF、SVG 等。

7. 图片路径:图片文件所在的磁盘路径。

8. 图片上传者:图片的上传者信息,包括上传者的用户名和上传时间。

根据以上需求,我们可以开始设计数据库。

第二步:设计数据库结构

在设计数据库结构前,需要先确定主键。因为图片库中的每张图片都具有独一无二的键值,因此可以选择使用图片文件名称作为主键。接下来,我们可以设计数据库的表结构。

图片信息表(Picture information table):

CREATE TABLE `picture_info` (

`picture_name` varchar(45) NOT NULL,

`picture_category` varchar(45) DEFAULT NULL,

`picture_description` varchar(255) DEFAULT NULL,

`picture_size` varchar(45) DEFAULT NULL,

`picture_source` varchar(45) DEFAULT NULL,

`picture_format` varchar(45) DEFAULT NULL,

`picture_path` varchar(255) DEFAULT NULL,

`picture_upload_by` varchar(255) DEFAULT NULL,

`picture_upload_at` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp(),

PRIMARY KEY (`picture_name`)

) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900__ci;

接下来,我们需要向表中插入一些图片数据。

INSERT INTO `picture_info` (`picture_name`, `picture_category`, `picture_description`, `picture_size`, `picture_source`, `picture_format`, `picture_path`, `picture_upload_by`, `picture_upload_at`)

VALUES (‘Nature01’, ‘Landscape’, ‘Beautiful landscape’, ‘1920*1080’, ‘User Upload’, ‘JPEG’, ‘D:/Pictures/Nature01.jpg’, ‘Linda’, ‘2023-12-03 22:44:49’),

(‘Flower01’, ‘Flower’, ‘Romantic roses’, ‘2400*1600’, ‘User Upload’, ‘JPEG’, ‘D:/Pictures/Flower01.jpg’, ‘John’, ‘2023-12-04 12:23:41’),

(‘Food01’, ‘Food’, ‘Delicious sushi’, ‘1200*800’, ‘User Upload’, ‘JPEG’, ‘D:/Pictures/Food01.jpg’, ‘Bob’, ‘2023-12-05 07:35:23’);

第三步:查询图片数据

在创建了数据库后,我们需要可以根据需要查询图片数据。以下是一些常见的图片查询语句:

1. 查询所有图片信息:

SELECT * FROM picture_info;

2. 根据图片名称查询图片信息:

SELECT * FROM picture_info WHERE picture_name = ‘Nature01’;

3. 根据图片分类查询图片信息:

SELECT * FROM picture_info WHERE picture_category = ‘Flower’;

4. 根据图片上传者查询图片信息:

SELECT * FROM picture_info WHERE picture_upload_by = ‘John’;

结语

以上是如何使用 MySQL 创建一个简单的图片数据库的介绍。当然,一个完善的图片数据库需要更加详细和精细的设计和实现,例如图片缩略图、图片关联和访问控制等。但是,本文所介绍的基础数据库结构可以作为起点,帮助初学者快速了解 MySQL 的基本设计和实现方式。

相关问题拓展阅读:

图像存入MySQL数据库longBLOB出错

应配察该是ms.Read(myphoto, 0, (Int32)ms.Length);

方慎此法出了问题,宽卖迅也就是没有真正把数据存入myphoto byte数组

问题解决了,是字符集的问扒笑尺题。我将数据库及用到的表、字段字符集全部设置为 utf8 后升贺,向数据库中存入图像、word、excel 等非纯文本格式的文件全部通过,并且也没遇到汉字乱春高码的问题。

如何用ado将二进制图片数据存入mysql数据库

用ADO方式连的MYSQL, 已经用AppendChunk图片以二进制插入数据库中,下面是读取的不分,写入相反的方式

void DatabaseFile::GetImage()

{

_RecordsetPtr pRs = NULL;

pRs.CreateInstance(__uuidof(Recordset));

_variant_t varChunk;

_variant_t varBLOB;

try

{

CString sql = “select image from visdata where DetectTime = ‘:23:44’;”;

//Open a Recordset

HRESULT hr = pRs->Open(_variant_t(“select * from visdata;”),_variant_t((IDispatch *) m_pConnection,true),adOpenKeyset,adLockOptimistic,adCmdText);

//read data

long lDataLength = pRs->Fields->GetItem(“image”)->ActualSize;//数据长度可以正确获取

varBLOB = pRs->GetFields()->GetItem(“image”)->GetChunk(lDataLength);

if(varBLOB.vt == (VT_ARRAY | VT_UI1))

{

BYTE *pBuf = NULL;

pBuf = (BYTE*)GlobalAlloc(GMEM_FIXED,lDataLength);//分配空搜扮间

hr = SafeArrayAccessData(varBLOB.parray,(void **)&pBuf);

if (FAILED(hr))

return;

//Build a File

char tmpPath;

GetCurrentDirectory( MAX_PATH,tmpPath);

CString strFileName = “\\temp2.bmp”;//输出图片的文带燃件名

strFileName = tmpPath+strFileName;

CFile outFile(strFileName,CFile::modeCreate|CFile::modeWrite|CFile::typeBinary );

/*要判断文件是否创世行灶建成功*/

LPSTR buffer = (LPSTR)GlobalLock((HGLOBAL)(pBuf));

outFile.WriteHuge(buffer,lDataLength);

GlobalUnlock((HGLOBAL)pBuf);

outFile.Close();

SafeArrayUnaccessData (varBLOB.parray);

}

pRs->Close();

}

用ADO方式连的MYSQL, 已经用AppendChunk图片以二进制插入数据库中,下面是读取的不分,写入相反的方式

void DatabaseFile::GetImage()

{

_RecordsetPtr pRs = NULL;

pRs.CreateInstance(__uuidof(Recordset));

_variant_t varChunk;

_variant_t varBLOB;

try

{

CString sql = “select image from visdata where DetectTime = ‘:23:44’;”;

//Open a Recordset

HRESULT hr = pRs->Open(_variant_t(“select * from visdata;”),_variant_t((IDispatch *) m_pConnection,true),adOpenKeyset,adLockOptimistic,adCmdText);

//read data

long lDataLength = pRs->Fields->GetItem(“image”)->ActualSize;//数据长度可以正确获取

varBLOB = pRs->GetFields()->GetItem(“image”)->GetChunk(lDataLength);

if(varBLOB.vt == (VT_ARRAY | VT_UI1))

{

BYTE *pBuf = NULL;

pBuf = (BYTE*)GlobalAlloc(GMEM_FIXED,lDataLength);//分配空搜扮间

hr = SafeArrayAccessData(varBLOB.parray,(void **)&pBuf);

if (FAILED(hr))

return;

//Build a File

char tmpPath;

GetCurrentDirectory( MAX_PATH,tmpPath);

CString strFileName = “\\temp2.bmp”;//输出图片的文带燃件名

strFileName = tmpPath+strFileName;

CFile outFile(strFileName,CFile::modeCreate|CFile::modeWrite|CFile::typeBinary );

/*要判断文件是否创世行灶建成功*/

LPSTR buffer = (LPSTR)GlobalLock((HGLOBAL)(pBuf));

outFile.WriteHuge(buffer,lDataLength);

GlobalUnlock((HGLOBAL)pBuf);

outFile.Close();

SafeArrayUnaccessData (varBLOB.parray);

}

pRs->Close();

图片数据库 mysql的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于图片数据库 mysql,使用 MySQL 创建强大的图片数据库,图像存入MySQL数据库longBLOB出错,如何用ado将二进制图片数据存入mysql数据库的信息别忘了在本站进行查找喔。


数据运维技术 » 使用 MySQL 创建强大的图片数据库 (图片数据库 mysql)