Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > PHP: Базы Данных > Тип для цвета


Автор: GrafF812 10.5.2011, 16:11
Привет. Мне нужно в mysql базе хранить шестнадцатиричное значения для цвета. Подскажите какой тип столбца лучше выбрать?

Автор: ayax2005 10.5.2011, 16:41
конечно числовой. int вполне достаточно

Автор: GrafF812 10.5.2011, 17:12
Ну делов том, что мне нужно это значние подставлять в таком виде
Код

color:#878787

В этом случае все равно лучше в INT или в VARCHAR сразу с '#'(решеткой) хранить?

Автор: NLspieler 10.5.2011, 19:08
Цитата(GrafF812 @ 10.5.2011,  17:12)
Ну делов том, что мне нужно это значние подставлять в таком виде
Код

color:#878787

В этом случае все равно лучше в INT или в VARCHAR сразу с '#'(решеткой) хранить?

Номер цвета - это шестнадцатиричное число, которое можно преобразовать в обычное десятичное или обратно.

Для хранения чисел и работы с ними требуется гораздо меньше ресурсов. 
Поэтому лучше перед сохранениям в базу данных, преобразовывать шестнадцатеричное число в десятичное при помощи функции http://php.net/manual/de/function.hexdec.php,
а при доставании из базы преобразовывать обратно в шестнадцатиричное, используя функцию http://www.php.net/manual/de/function.dechex.php и подставлять решетку и все что нужно.

Забыл упомянуть, что если в базу сохранить черный цвет #000000, то в базу сохранится число 0. 
При обратном преобразовании получится шестнадцатеричное число 0, а не так как было.
Поэтому нужно проверять при помощи функции strlen длину получившейся строки, и если есть необходимость, добавлять слева недостающие нулю

Автор: solenko 10.5.2011, 20:50
Цитата(NLspieler @  10.5.2011,  18:08 Найти цитируемый пост)
Забыл упомянуть, что если в базу сохранить черный цвет #000000, то в базу сохранится число 0. 
При обратном преобразовании получится шестнадцатеричное число 0, а не так как было.
Поэтому нужно проверять при помощи функции strlen длину получившейся строки, и если есть необходимость, добавлять слева недостающие нулю

Все гараздо проще
sprintf('#%06x', 0);

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)