Есть хорошее эмпирическое правило - и, как и все эмпирические правила, оно далеко от совершенства - это работает для меня довольно хорошо:
- Если БД «понимает» содержаниепотенциально BLOBy поле, сохраните его в БД
- Если БД не имеет представления о содержимом, сохраните его внешне
Учитывая это и мой опыт до сих пор, я не рекомендуюиспользование поля BLOB для изображений и т. д.
Теперь, когда мы думаем о контенте, который может быть текстом, изображением или чем-то еще, я вполне уверен, что вашей бизнес-логике понадобится какое-то поле, которое говорит ему, как использовать контентВ любом случае, трудно представить себе приложение, которое будет рассматривать изображение как изображение, просто взглянув на данные.Поэтому я рекомендую вам создать такое поле, на ум придет mimetype
и, скажем, поле mediumtext
.Бизнес-логика вашего приложения может легко вывести, что mimetype='text/plain'
будет означать, что данные в текстовом поле являются полезными данными, а mimetype='image/png'
будет означать, что данные в текстовом поле - это (относительный) путь к файловому ресурсу.
Это дает вам возможность поиска и индексации содержимого с довольно низкой вероятностью ложных совпадений, если вы создаете пути к файлам таким образом, что это не будет словом на любом языке.MD5(basename).suffix
приходит на ум.