Хранение изображений в MySQL с помощью Navicat

Хранение изображений в MySQL с помощью Navicat Также необходимо различать изображения разных размеров, такие как эскизы, изображения веб-дисплея и т.п. Например, одно приложение, которое я недавно разработал, показывает новости, где у каждой статьи есть миниатюра и изображение основной статьи. Другое приложение показывает логотипы компаний в маленьком и большом размере.

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

Средства разработки и администрирования Navicat обеспечивают превосходную поддержку управления изображениями. В сегодняшнем блоге мы узнаем, как Navicat упрощает процесс хранения изображений.

В демонстрационных целях я буду использовать Navicat Premium с базой данных MySQL 8, но та же процедура применима и к другим реляционным базам данных.

В MySQL предпочтительным типом данных для хранения изображений является BLOB. Однако на самом деле существует три разновидности BLOB. Тот, который вы выберете, зависит от размера изображений, которые вы будете хранить. Если вы сомневаетесь, перейдите на BLOB большей емкости! Вот три типа BLOB:

  • BLOB: Может обрабатывать до 65 535 байт данных.
  • MEDIUMBLOB: максимальная поддерживаемая длина составляет 16 777 215 байт.
  • LONGBLOB: хранит до 4 294 967 295 байт данных.

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

Помимо самого изображения, вам может оказаться полезным хранить другую информацию об изображении, такую ​​как идентификатор, имя, описание, размер, тип (JPEG, GIF, BITMAP и т. д.), категория и т. д.

При использовании Navicat нет необходимости писать код SQL для загрузки изображений. Вместо этого вы можете использовать стандартный файловый браузер для поиска и вставки файлов изображений.

Всякий раз, когда вы просматриваете содержимое таблицы в представлении «Сетка или форма», вы можете выбрать, как вы хотите, чтобы Navicat обрабатывал данные, из раскрывающегося списка

типа данных :

Выбор Изображение из раскрывающегося списка добавляет панель предварительного просмотра изображения внизу содержимое таблицы/строки:

Слева от предварительного просмотра файла вы найдете три значка: «Загрузить», «Сохранить на диск» и «Очистить». Чтобы загрузить изображение, просто щелкните значок Загрузить и выберите изображение с помощью стандартного диалогового окна файлового браузера операционной системы. После вставки изображение, а также его размер в байтах появится на панели предварительного просмотра:

Обратите внимание, что для изображения выше требуется MEDIUMBLOB, так как его размер превышает 65 535 байт!

В сегодняшнем блоге мы узнали, как хранить изображения в базе данных MySQL 8 с помощью Navicat Premium 15.

Сейчас самое подходящее время для покупки Navicat Premium, так как версия 15 добавляет более 100 улучшений и включает в себя несколько новых функций, которые дадут вам больше возможностей. способы создания, управления и обслуживания ваших баз данных, чем когда-либо прежде!

11.3.4 Типы BLOB и TEXT

11.3.4 Типы BLOB и TEXT

BLOB

— это большой двоичный объект, который может содержать переменный объем данных. Четыре BLOB типы TINYBLOB , BLOB , СРЕДНИЙБЛОБ и ДЛИННЫЙБЛОБ . Они отличаются только максимальной длиной значений, которые они могут держать. Четыре типа TEXT TINYTEXT , ТЕКСТ , СРЕДНЕТЕКСТ и ДЛИННЫЙ ТЕКСТ . Они соответствуют четырем типам BLOB и имеют одинаковую максимальную длину и требования к хранению.
Видеть Раздел 11.7, «Требования к хранению типов данных».

Значения BLOB обрабатываются как двоичные строки (байтовые строки). У них бинарник набор символов и сопоставление, а также сравнение и сортировка на основе числовых значений байтов в значениях столбца. Значения TEXT обрабатываются как недвоичные строки (символьные строки). У них есть набор символов, отличный от двоичный код , значения сортируются и сравниваются на основе сопоставления набора символов.

Если строгий режим SQL не включен и вы присваиваете значение BLOB или

TEXT столбец, который превышает максимальную длину столбца, значение усекается до подходят, и выдается предупреждение. Для усечения не пробела символов, вы можете вызвать ошибку (а не предупреждение) и подавить вставку значения с помощью строгого SQL режим. См. раздел 5.1.11, «Режимы SQL сервера».

Усечение лишних пробелов в конце вставляемых значений в TEXT столбцов всегда генерирует предупреждение, независимо от режима SQL.

Для столбцов

TEXT и BLOB : при вставке нет заполнения, и байты не удаляются Выбрать.

Если столбец TEXT индексируется, запись индекса сравнения дополняются пробелами в конце. Это означает, что, если индексу требуются уникальные значения, для значения, отличающиеся только количеством пробелов в конце. За например, если таблица содержит 'а' , попытка для хранения 'a' приводит к дублированию ключа ошибка. Это неверно для столбцов BLOB .

В большинстве случаев вы можете считать BLOB

столбец как столбец VARBINARY , который может быть сколь угодно большим. Точно так же вы можете рассматривать TEXT столбец как Колонка VARCHAR . BLOB и TEXT отличаются от VARBINARY и VARCHAR следующими способами:

  • Для индексов на BLOB и TEXT столбцов, необходимо указать индекс длина префикса. Для CHAR

    и VARCHAR , длина префикса по желанию. См. раздел 8.3.5, «Индексы столбцов».

  • BLOB и ТЕКСТ столбцов не может иметь значений DEFAULT .

Если вы используете атрибут BINARY с Тип данных TEXT , столбцу присваивается двоичная ( _bin ) сортировка столбца набор символов.

LONG и LONG VARCHAR

карта к типу данных MEDIUMTEXT . Это функция совместимости.

MySQL Connector/ODBC определяет значения BLOB как LONGVARBINARY и ТЕКСТ значения как LONGVARCHAR .

Потому что BLOB и ТЕКСТ значения могут быть очень длинными, вы можете столкнуться с некоторыми ограничения в их использовании:

  • Только первый max_sort_length байт столбец используется при сортировке. Значение по умолчанию max_sort_length равно 1024. Вы можете сделать больше байтов значимыми при сортировке или группировке за счет увеличения стоимости

    max_sort_length на сервере запуск или время выполнения. Любой клиент может изменить значение своего сеанс max_sort_length переменная:

     mysql> SET max_sort_length = 2000;
    mysql> SELECT id, комментарий FROM t
        -> ЗАКАЗАТЬ ПО комментарию; 
  • Экземпляры BLOB или TEXT столбцов в результате запроса который обрабатывается с помощью временной таблицы, вызывает сервер использовать таблицу на диске, а не в памяти, потому что

    ПАМЯТЬ механизм хранения не поддерживает эти типы данных (см. Раздел 8.4.4, «Использование внутренних временных таблиц в MySQL»). Использование диска влечет за собой снижение производительности, поэтому включите BLOB или ТЕКСТ столбцов в результате запроса только в том случае, если они действительно необходимы. За например, избегайте использования ВЫБЕРИТЕ * , который выбирает все столбцы.

  • Максимальный размер BLOB или ТЕКСТ объект определяется его типом, но самое большое значение, которое вы фактически можете передать между клиента и сервера определяется количеством доступных память и размер коммуникационных буферов. Вы можете изменить размер буфера сообщений, изменив значение параметра макс_разрешенный_пакет переменная, но вы должны сделать это как для сервера, так и для вашего клиентская программа. Например, оба mysql и mysqldump позволяют изменить сторона клиента значение max_allowed_packet . См. раздел 5.1.1, «Настройка сервера». Раздел 4.5.1, «mysql — клиент командной строки MySQL», и раздел 4.5.4, «mysqldump — программа резервного копирования базы данных». Вы также можете сравнить размеры пакетов и размер объектов данных, которые вы храните в хранилище см.