[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Булевы значения mySQL
NierRa
Булевые значения в БД mySQL хранятся в виде TINYINT(1)
При выводе с БД и обработке мы получаем типы переменных int(1) и int(0)

Такой тип переменных удовлетворяет запросам if($a) и if(!$a) но все же вопрос...
Тип данных boolean при сохранении в БД конвертируется в TINYINT(1).
Таким образом в phpmyadmin можно руками ввести число выше 1. Это не так страшно, как неудобно.
Есть ли возможность строго указать логический тип данных, чтобы нельзя было вводить никаких значений кроме 0 и 1, и чтобы с базы приходило не int(1), int(0), а bool(true), bool(false)

_____________
Задача на корректную обработку данных (мое решение)
http://eu.battle.net/sc2/ru/profile/2212951/1/IIIIIIIIIIII/
inpost
а чем тебе 1 и 0 не подходит? Это логические правда и ложь!
Для перечисления 1 или 0 - enum, но это не верно, так как правильнее всего контролировать вхождение данных своим скриптом.

Это выглядит так: у меня в базе: 1 и 0, а я хочу, чтобы хранились мужчина и женщина... ну нафига?! 1 - мужчина, 0 - женщина, всё итак интуитивно понятно и меньше места занимает.

_____________
Обучаю веб-программированию качественно и не дорого: http://school-php.com
Фрилансер, принимаю заказы: PHP, JS, AS (видео-чаты). Писать в ЛС (Личные сообщения на phpforum).
NierRa
Цитата
а чем тебе 1 и 0 не подходит? Это логические правда и ложь!

Подходит, но есть два нюанса
1. Не важно как и зачем, но кроме значений 0 и 1 можно спокойно занести в бд 2,3,4 и.т.д. Если в поле с типом int попытаться занести строковое значение - это выдаст еррор и данные в таблицу не занесутся. В принципе наплевать, но выглядит уже некрасиво. Я сторонник красивого кода и красивых решений. (Как бы глупо это не звучало)

2.
mysql_query("UPDATE `field` SET `row` = false");
занесет в БД ноль, что и нужно. Однако
mysql_query("UPDATE `field` SET `row` = true");
ничего не изменит и проверка на mysql_affected_rows ничего не покажет. Ноль в БД не изменится на еденицу

Как по мне запрос вида = true/false нагляднее, чем = 1/0. Хотя может это со временем перерастуUPDATE `field` SET `row` = false

_____________
Задача на корректную обработку данных (мое решение)
http://eu.battle.net/sc2/ru/profile/2212951/1/IIIIIIIIIIII/
inpost
0 = false, 1 = true. Ты это должен понять с самого начала.
Чтобы в БД не попало число отличное от 0 и 1 - у тебя в руках твой php скрипт, где ты осуществишь фильтрацию входящих данных.
Ошибку ловить надо не после того, как произошло соединение с БД, после отправлен кривой запрос, который вернул ошибку, а ещё до того, как ты отправишь данные, то есть на уровне ПХП. Раньше поймал - меньше работы скрипту, быстрее работает.

_____________
Обучаю веб-программированию качественно и не дорого: http://school-php.com
Фрилансер, принимаю заказы: PHP, JS, AS (видео-чаты). Писать в ЛС (Личные сообщения на phpforum).
TranceIT
Цитата (NierRa @ 4.09.2012 - 00:39)
1. Не важно как и зачем, но кроме значений 0 и 1 можно спокойно занести в бд 2,3,4 и.т.д.

Можно, но зачем? В правильно написанном приложении такого не случится.

Цитата (NierRa @ 4.09.2012 - 00:39)
Как по мне запрос вида = true/false нагляднее, чем = 1/0.


inpost, правильно про место говорит.
В небольших базах расход не сильно заметен. Я сейчас работаю с базой, которая до оптимизации занимала 450гб. После замены true/false на 1/0 размер уменьшился чуть больше, чем в полтора раза.


_____________
Безвозмездно помогаю только тем, кто сам пытается что-то сделать.

Остальным за WMR
Даже если там 10 строк кода!
Даже если мне это ничего не стоит!
Даже если вы нуб!

user posted image
NierRa
Всем спасибо за советы

Цитата
0 = false, 1 = true. Ты это должен понять с самого начала.

С этим проблем нет. Ночью с закрытыми глазами, на пьяную голову, во время секса, падая с парашутом расскажу smile.gif

PS. Просто возник вопрос и найти ответ на него кроме как спросив у знающих людей не представляется возможным

_____________
Задача на корректную обработку данных (мое решение)
http://eu.battle.net/sc2/ru/profile/2212951/1/IIIIIIIIIIII/
Guest
(bool)$var
bestxp
возьми постгрес у них там есть тип поля boolean
Игорь_Vasinsky
$a = (bool)1;
var_dump($a); //bool(true)
$a = (bool)0;
var_dump($a);//bool(false)




_____________
HTML, CSS (Bootstrap), JS(JQuery, ExtJS), PHP, MySQL, MSSql, Posgres, (TSql, BI OLAP, MDX), Mongo, Git, SVN, CodeIgnater, Symfony, Yii 2, JiRA, Redmine, Bitbucket, Composer, Rabbit MQ, Amazon (SQS, S3, Transcribe), Docker
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2025 Invision Power Services, Inc.