Могу ли я хранить изображения в MySQL?

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

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

Ответ 1

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

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

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

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

Ответ 2

Вам нужно сохранить как blob, тип данных 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')
)

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

Ответ 3

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

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

Вместо этого попробуйте обновить таблицу, чтобы добавить поле image_path. Например:

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

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

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

Ответ 4

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

вам нужно создать столбец PHOTO в вашей таблице и установить его как mediumblob.

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

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

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

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

Ответ 5

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

EDIT: Похоже, что методы BLOB, упомянутые в других сообщениях и по другим вопросам, были бы лучше, чем кодирование base64.