Могу ли я хранить изображения в MySQL [дубликат]


Возможные Дубликаты:
изображения в MySQL
хранение изображений в MySQL

Я пытаюсь разработать веб-сайт, где пользователи загружают свои изображения в рамках регистрации. Я хочу, чтобы для каждого изображения должен быть большой палец, созданный с помощью PHP (что не так сложно). Я хочу сохранить большие пальцы (так как они очень маленькие) в базе данных, и я использую MySQL. (Я не хочу сохранять большие пальцы как физические файлы на водить.)
Позволяет ли MySQL сохранять и извлекать данные изображения и как это сделать? Если он не поддерживает данные изображения, есть ли бесплатная база данных, что ли? Я буду рад, если ссылка может быть предоставлена.
Спасибо.

4 96

4 ответа:

Да, вы можете хранить изображения в базе данных, но это не целесообразно на мой взгляд, и это не общая практика.

общая практика заключается в хранении изображений в каталогах файловой системы и хранении ссылок на изображения в базе данных. например, путь к изображению, имя изображения и т. д.. Или, альтернативно, вы можете даже хранить изображения в сети доставки контента (CDN) или многочисленных хостах на некотором большом пространстве физической территории и хранить ссылки для доступа к ним ресурсы в базе данных.

изображения могут получить довольно большой, больше, чем 1 МБ. И поэтому хранение изображений в базе данных потенциально может привести к ненужной нагрузке на вашу базу данных и сеть между вашей базой данных и вашим веб-сервером, если они находятся на разных хостах.

Я работал в стартапах, средних компаниях и крупных технологических компаниях С 400 тыс.+ сотрудников. За мой 13-летний профессиональный опыт я никогда не видел, чтобы кто-то хранил изображения в базе данных. Я говорю это поддержка заявления это необычная практика.

вам нужно будет сохранить как blob, LONGBLOB тип данных в mysql будет работать.

Ex:

CREATE TABLE 'test'.'pic' (
    'idpic' INTEGER UNSIGNED NOT NULL AUTO_INCREMENT,
    'caption' VARCHAR(45) NOT NULL,
    'img' LONGBLOB NOT NULL,
  PRIMARY KEY ('idpic')
)

как говорили другие, это плохая практика, но это можно сделать. Не уверен,что этот код будет хорошо масштабироваться.

вы можете хранить изображения в MySQL в виде больших двоичных объектов. Однако, это проблематично по нескольким причинам:

  • изображения могут быть сложнее манипулировать: вы должны сначала получить их из базы данных, прежде чем массовые операции могут быть выполнены.
  • за исключением очень редких случаев, когда вся база данных хранится в ОЗУ, базы данных MySQL в конечном итоге хранятся на диске. Это означает, что образы БД преобразуются в большие двоичные объекты, вставляются в базу данных, а затем сохраняются на диске; вы можете сэкономить много накладных расходов, просто сохраняя их на диске.

вместо этого рассмотрите возможность обновления таблицы для добавления поля image_path. Например:

ALTER TABLE `your_table`
ADD COLUMN `image_path` varchar(1024)

затем сохраните изображения на диске и обновите таблицу с помощью пути к изображению. Если вам нужно использовать образы, извлеките их с диска, используя указанный путь.

выгодным побочным эффектом этого подхода является то, что изображения не обязательно хранятся на диске; вы можете так же легко сохраните URL-адрес вместо пути к изображению и извлеките изображения из любого места, подключенного к интернету.

вам нужно будет сохранить изображение в базе данных в виде большого двоичного объекта.

вы хотите создать столбец с именем PHOTO в таблице и установить его в качестве mediumblob.

тогда вы захотите получить его из формы следующим образом:

    $data = file_get_contents($_FILES['photo']['tmp_name']);

а затем установите для столбца значение в $data.

конечно, это плохая практика, и вы, вероятно, хотите сохранить файл с именем, которое соответствует учетной записи пользователя.