MySQLは人気のあるデータベース管理システムの1つです。アプリケーションに応じて設計されたデータを保存および取得するために使用できます。ほとんどのアプリケーションは、イメージを管理するために必要です。このチュートリアルでは、画像をMySQLテーブルに保存するためのオプションを提供します。
メモ :専門家は、会社またはプロジェクトの画像データベース開発を支援できます。
画像パスを保存
最も簡単な方法は、画像をファイルシステムのディレクトリに保存し、画像へのパスや画像名など、SQLやMySQLなどのデータベースに写真への参照を保存することです。または、CDNまたは多数のホストに画像を保持し、広大な領域にまたがって、そのデータベース内のそれらのリソースにアクセスするための参照を保持することもできます。
このように、画像全体をデータベースに保持する必要はありませんが、フォルダに保存されている画像へのパスのみを保存する必要があります。画像が常に同じフォルダにある場合、つまり各画像に常に同じである一意のパスがある場合、画像の保存は適切です。ただし、場合によっては、画像をあるフォルダから別のフォルダに転送する必要があります。その場合、最善の解決策は画像ファイルへの動的パスを作成することです。そのため、画像を移動する必要がある場合でも、データベースを変更する義務はありません。
以下に示すように、既存のテーブルを更新して画像パスフィールドを追加できます。
// Add column to store image path
ALTER TABLE `my_table`
ADD COLUMN `image_pathLocation` varchar(1024)
別のアプローチは、画像用に別のテーブルを作成し、画像テーブルを使用してテーブルに参照を追加することです。このようにして、複数のテーブルで1つのテーブルに画像を保存できます。下記の表を使用して画像を保存できます。
// 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;
上記の表では、名前は保存されている画像の実際の名前であり、タイトルは画像をアップロードするユーザーからの入力を取得するためのオプションです。また、タイプ列は、画像をローカルに保存するかCDNに保存するかを決定できます。ローカルに保存されている場合は、列ディレクトリを使用して、画像が保存されるパスを指定できます。 CDNの場合、列URLを使用して画像のベースパスを取得できます。タイプ、ディレクトリ、URLの他に、小、中、大を使用して、同じ画像を複数のサイズで保存することもできます。
写真を使用する必要がある場合は、指定されたパスを使用してディスクから写真を取得します。このアプローチの利点は、写真を必ずしもディスクに保存する必要がないことです。画像パスの代わりにURLを保持し、インターネットにアクセス可能な任意の場所から画像を取得できます。
MySQLテーブルに画像を保存
MySQLデータベースに画像を保存する別の方法は、テーブル自体に画像を保存することです。画像のサイズは非常に大きくなる場合があり、1または2MBより大きくなる場合もあります。そのため、画像をデータベースに保存すると、データベースと、データベースとWebサーバーが別々のホスト上にある場合、それらの間のネットワークに追加の負荷がかかる可能性があります。
このアプローチでは、画像ファイルの管理が難しい場合があります。他の操作を実行する前に、まずデータベースからそれらを復元する必要があります。
データベース全体がRAMに保存される例外がいくつかあります。 MySQLデータベースはディスクに順番に保存されます。これは、データベースの画像ファイルがBLOBに変換され、データベースに埋め込まれてから、ディスクに保持されることを意味します。最初のアプローチで述べたように、ディスクに保存するだけで多くの問題を回避できます。
次に、データベースに画像を保存するためのテーブルImageを作成します。 idを使用して各画像を識別し、キャプションを使用して表示目的で画像の名前を保存しました。 画像列 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;
概要
このチュートリアルでは、MySQLデータベースを使用して画像を保存するためのオプションを提供しました。他のデータベースでも同じアプローチに従うことができます。