Подтвердить что ты не робот

Как сохранить цвет в поле базы данных?

Мне нужно хранить цвета в базе данных.

Как я могу сохранить цвет наилучшим образом в поле базы данных?, по имени цвета или что-то еще?

4b9b3361

Ответ 1

Если его для HTML-страницы достаточно хранить тэг #RRGGBB в виде строки.

Если это для .NET, он поддерживает построение цвета с его значением ARGB

System.Drawing.Color c = System.Drawing.Color.FromArgb(int);

int x = c.ToArgb();

чтобы вы могли просто сохранить этот int.

Ответ 2

Вероятно, значение цвета было бы лучшим, например. #FFFFFF или # FF0000

Ответ 3

Сохраняйте цвет как целое число 24 или 32 бита, например, в HTML/CSS, то есть # FF00CC, но преобразуется в целое число, а не в строку.

Целые числа занимают меньше места, чем строки (особенно VCHAR).

Ответ 4

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

Простейшее решение, конечно, просто хранит все как шестибайтную шестнадцатеричную строку ASCII цвета RGB без поддержки какого-либо другого формата. Хотя вы можете столкнуться с проблемами, если позже захотите поддерживать дополнительные форматы.

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

  • Предположим, что контекстный цвет по умолчанию, если NULL, пусто или неверно
  • Принять необязательный завершающий альфа-байт 00-FF, если предположить, что FF (непрозрачный) опущен
  • Принять как полный (AABBCC), так и сокращенный (ABC) синтаксис, который составляет половину размера, быстрее набирать и поддерживается CSS
  • Поддержка опциональной ведущей цифры #, которая является общей
  • Поддерживать необработанные строки, удерживать все CSS-поддержки, такие как "rgba (255,255,255,1)" или "красный"
  • Поддерживать пользовательские строки цветового режима, такие как "cmyk(), hsv(), hsl(), lab()" и т.д.
  • Предположим, что шестнадцатеричные строки RGB (A), если они начинаются с символа # или длиной, равны 3, 4, 6 или 8 и содержат только [0-9A-Fa-f]

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

Возможно, стоит изучить гибридный подход. Например, рассмотрим таблицу всех возможных значений RGB в 8 бит на канал, с полями, состоящими из таких элементов, как id, rgbhex, cssname, cmyk, hsl, hsv, lab, rgb и т.д. Вам нужно будет автоматизировать создание такой таблицы, поскольку она была бы такой большой (16777216 записей). Это добавит более 16 МБ к вашей таблице, но преимущество этого решения в том, что все ваши значения цвета будут всего лишь одним целым полем id, связанным с внешним ключом, в таблицу поиска цветов. Быстрые сортировки и поиск, любые цветовые данные, которые вам нужны без какого-либо преобразования, и чрезвычайно расширяемы. Вы также можете сохранить таблицу в своем собственном файле базы данных для совместного использования любой другой базой данных или script в своем приложении. По общему признанию, это решение в большинстве случаев является излишним.

Ответ 5

Сохраните его как int

Используйте ToArgb и FromArgb для установки и получения значений.

Ответ 6

Я думаю, это зависит. Если вам просто нужно сохранить цвет, то шестнадцатеричное обозначение должно быть прекрасным. Если вам нужно выполнить запросы к конкретным цветовым каналам, тогда вам понадобятся небольшие поля для каждого цветного канала (будь то RGB, ARGB, CYMK и т.д.).

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

Ответ 7

Я предлагаю иметь таблицу поиска по 3 столбцам:

ID int; Имя varchar (40) null; ColorVal char (8) или int (в зависимости от того, как вы представляете цвета)

Для неназванных цветов просто оставьте поле имени null

Ответ 8

Я бы пошел на шестнадцатеричную нотацию, если цвета ограничены цветами в Интернете.

Так например # 0000FF для синего.

Дополнительная информация здесь: http://en.wikipedia.org/wiki/Web_colors

Ответ 9

В каком формате вы хотите хранить цвета? CMTK, RGB, Pantone? Это как-то помогает узнать... строковый формат #RGB hex отлично работает, если он предназначен для веб-цветов или приложений, но не очень хорош, если вы пытаетесь смешивать краски.

Ответ 10

Я храню его как char (9).

  • Включен знак '#', чтобы мне не пришлось добавлять его в код и использовать его немедленно
  • Обычный char вместо nchar
  • Сохраняет прозрачность

Ответ 11

Сохранить цвет в базе данных:

     //Save this int value in database
    int argb = colorDialog1.Color.ToArgb();

а также удалить его из базы данных:

    //argb is the value of color stored in database in prev. section
    Color.FromArgb(argb)

Ответ 12

Почему бы вам не использовать оба? Структура таблицы будет Int ARGB для ключа и varchar для имени.

ARGB (Key), Name
FFFFFFFF  ,Black
FF000000  ,White