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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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