sql >> Database >  >> RDS >> Mysql

Hoe afbeeldingen op te slaan in de MySQL-database

MySQL is een van de populaire databasebeheersystemen. Het kan worden gebruikt om gegevens op te slaan en op te halen die zijn ontworpen volgens de toepassingen. De meeste applicaties zijn nodig om de afbeeldingen te beheren. Deze tutorial biedt de opties om afbeeldingen op te slaan in een MySQL-tabel.

Opmerkingen :Professionals kunnen u helpen bij het ontwikkelen van beelddatabases voor uw bedrijf of uw project.

Bewaar het afbeeldingspad

De eenvoudigste benadering is om afbeeldingen op te slaan in mappen op het bestandssysteem en verwijzingen naar de foto's op te slaan in de database zoals SQL &MySQL, bijvoorbeeld het pad naar de afbeelding, de afbeeldingsnaam, enzovoort. Als alternatief kunt u zelfs afbeeldingen op een CDN of meerdere hosts bewaren over een groot uitgestrekt gebied en hun referenties voor toegang tot die bronnen in die database bewaren.

Op deze manier zijn we niet verplicht om de volledige afbeelding in de database te bewaren, maar om alleen het pad naar de afbeelding op te slaan in een map. Het opslaan van afbeeldingen is goed als de afbeeldingen altijd in dezelfde map staan, d.w.z. als elke afbeelding zijn unieke pad heeft dat altijd hetzelfde zal zijn. In sommige gevallen moeten de afbeeldingen echter van de ene map naar de andere worden overgebracht. In dat geval is de beste oplossing om een ​​dynamisch pad naar het afbeeldingsbestand te creëren, dus als de afbeelding moet worden verplaatst, is er geen verplichting om de database aan te passen.

We kunnen een bestaande tabel bijwerken om een ​​padveld voor afbeeldingen toe te voegen, zoals hieronder weergegeven.

// Add column to store image path
ALTER TABLE `my_table`
ADD COLUMN `image_pathLocation` varchar(1024)

Een andere benadering is om een ​​aparte tabel voor de afbeeldingen te maken en een verwijzing in tabellen toe te voegen met behulp van de afbeeldingentabel. Op deze manier kunnen meerdere tabellen de afbeeldingen in één tabel opslaan. U kunt de onderstaande tabel gebruiken om uw afbeeldingen op te slaan.

// Create the Image table

CREATE TABLE image (
`id` BIGINT NOT NULL AUTO_INCREMENT,
`name` VARCHAR(1024) NOT NULL,
`title` VARCHAR(2048) NULL,
`description` VARCHAR(4096) NULL,
`extension` VARCHAR(160) NULL,
`directory` VARCHAR(512) NULL,
`size` FLOAT NOT NULL,
`type` VARCHAR(50) NOT NULL,
`url` VARCHAR(2048) NULL,
`medium` VARCHAR(1024) NULL,
`small` VARCHAR(1024) NULL,
`thumb` VARCHAR(1024) NULL,
`caption` VARCHAR(1024) NULL,
`altText` VARCHAR(512) NULL,
`createdAt` DATETIME NULL,
`modifiedAt` DATETIME NULL,
PRIMARY KEY (`id`),
INDEX `idx_image_name` (`name` ASC),
INDEX `idx_image_type` (`type` ASC)
) ENGINE = InnoDB;

In de bovengenoemde tabel is de naam de daadwerkelijke naam van de afbeelding die wordt opgeslagen, en de titel is optioneel om input te krijgen van de gebruikers die de afbeelding uploaden. Ook kan de typekolom beslissen of de afbeelding lokaal of op een CDN wordt opgeslagen. Als het lokaal is opgeslagen, kunnen we de kolommap gebruiken om het pad op te geven waar de afbeelding wordt opgeslagen. In het geval van CDN kunnen we de kolom-URL gebruiken om het basispad van de afbeelding te krijgen. Naast type, directory en URL kunnen we ook small, medium en large gebruiken om dezelfde afbeelding in meerdere formaten op te slaan.

Als u de afbeeldingen moet gebruiken, haalt u ze op van de schijf via het opgegeven pad. Het voordeel van deze aanpak is dat de foto's niet per se op een schijf hoeven te worden opgeslagen; we kunnen een URL vasthouden in plaats van een afbeeldingspad en afbeeldingen ophalen van elke internettoegankelijke locatie.

Bewaar afbeelding in MySQL-tabel

Een andere manier om een ​​afbeelding in de MySQL-database op te slaan, is door deze in de tabel zelf op te slaan. Afbeeldingen kunnen behoorlijk groot zijn, soms groter dan 1 of 2 MB. Het opslaan van afbeeldingen in een database kan uw database en het netwerk tussen uw database en uw webserver dus extra belasten als ze op aparte hosts staan.


In deze benadering kunnen de afbeeldingsbestanden een uitdaging zijn om te beheren. U moet ze eerst vanuit de database herstellen voordat andere bewerkingen moeten worden uitgevoerd.


Er zijn enkele uitzonderingen waarbij de volledige database in RAM wordt opgeslagen. MySQL-databases worden achtereenvolgens op een schijf opgeslagen. Dit betekent dat uw databaseafbeeldingsbestanden worden geconverteerd naar blobs, ingesloten in een database en vervolgens op een schijf worden bewaard. We kunnen veel problemen voorkomen door ze simpelweg op een schijf op te slaan, zoals vermeld in de eerste benadering.

Maak nu de tabel Image om de afbeeldingen in de database op te slaan. Ik heb id gebruikt om elke afbeelding en bijschrift te identificeren om de naam van de afbeelding op te slaan voor weergavedoeleinden. De fotokolom slaat de afbeelding op in de tabel met het gegevenstype LONGBLOB .

// Create the Image table

CREATE TABLE image (
`id` BIGINT NOT NULL AUTO_INCREMENT,
`name` VARCHAR(1024) NOT NULL,
`title` VARCHAR(2048) NULL,
`description` VARCHAR(4096) NULL,
`extension` VARCHAR(160) NULL,
`size` FLOAT NOT NULL,
`caption` VARCHAR(1024) NULL,
`altText` VARCHAR(512) NULL,
`picture` LONGBLOB NOT NULL,
`createdAt` DATETIME NULL,
`modifiedAt` DATETIME NULL,
PRIMARY KEY (`id`),
INDEX `idx_image_name` (`name` ASC),
INDEX `idx_image_type` (`type` ASC)
) ENGINE = InnoDB;

Samenvatting

Deze tutorial bood de opties om afbeeldingen op te slaan met behulp van de MySQL-database. Dezelfde aanpak kan worden gevolgd voor andere databases.


  1. Retourwaarde ophalen uit opgeslagen procedure in C#

  2. Hoe het linker- of rechterdeel van een string in MySQL te retourneren?

  3. Kan ik een binaire tekenreeks opslaan in de CLOB-kolom?

  4. Converteer django RawQuerySet naar Queryset