Могу ли я хранить изображения в 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.