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

  

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

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

104 голоса | спросил afaolek 24 J0000006Europe/Moscow 2011, 22:32:17

4 ответа


0

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

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

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

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

ответил FinalForm 24 J0000006Europe/Moscow 2011, 22:35:50
0

Вам нужно сохранить как большой двоичный объект, тип данных LONGBLOB в mysql будет работать.

Пример:

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

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

ответил developerdoug 24 J0000006Europe/Moscow 2011, 22:37:21
0

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

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

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

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

Затем сохраните изображения на диске и обновите таблицу, указав путь к изображению. Когда вам нужно использовать изображения, извлеките их с диска по указанному пути.

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

ответил George Cummins 24 J0000006Europe/Moscow 2011, 22:35:44
0

Вам нужно будет сохранить изображение в базе данных как BLOB.

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

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

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

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

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

ответил bsimic 24 J0000006Europe/Moscow 2011, 22:38:42

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132