MySQL типы данных Boolean и TINYINT(1)

Статус
В этой теме нельзя размещать новые ответы.

jabbaxatt

Добрый модератор
Регистрация
21 Янв 2009
Сообщения
902
Реакции
432
Какой тип данных правильно задавать в базе MySQL (и\или MariaDB) для хранения логического типа данных?

Чтобы и места меньше (хотя вроде Boolean и TINYINT(1) занимают одинаково места) и выборки для определения числа записей с параметром True\Falze были максимально быстрыми.

В интернете пришут "Тип BOOLEAN это аналог TINYINT(1). Значение 1 это истина (true), значение 0 ложь (false)."

Но как всегда - хочу проверить и уточнить.
 
Какой тип данных правильно задавать в базе MySQL (и\или MariaDB) для хранения логического типа данных?

Чтобы и места меньше (хотя вроде Boolean и TINYINT(1) занимают одинаково места) и выборки для определения числа записей с параметром True\Falze были максимально быстрыми.

В интернете пришут "Тип BOOLEAN это аналог TINYINT(1). Значение 1 это истина (true), значение 0 ложь (false)."

Но как всегда - хочу проверить и уточнить.

Я всегда пользуюсь 0 и 1, но только потому, что пишется одним знаком, а не 4-5. Не уверен, что будет разница в скорости запроса, в двоичном коде вроде разницы нет.
 
Я всегда пользуюсь 0 и 1, но только потому, что пишется одним знаком, а не 4-5. Не уверен, что будет разница в скорости запроса, в двоичном коде вроде разницы нет.

Т.е.
Код:
CREATE TABLE `tablename` (
  `TINYIN` tinyint(1) default NULL,
- так правильно? Вроде в Интернете тоже пишут что так и надо использовать.
 
Т.е.
Код:
CREATE TABLE `tablename` (
  `TINYIN` tinyint(1) default NULL,
- так правильно? Вроде в Интернете тоже пишут что так и надо использовать.

или так:`название поля` int(1) default NULL, я обычно через php-admin создаю таблицы, там только выбрать из предложенных вариантов тип поля и значение по умолчанию и в синтаксисе не ошибешься.
 
Для таких данных есть вариант использовать ENUM и SET, но особого смысла нет. TINYINT(1) вполне справляется с такой задачей, но, лучше, использовать не 0 и 1, а 1 и NULL. Тогда Проверка if ($a) будет работать корректно и не потребуется использовать == 1 и т.д.

И да, правильный выбор типа данных - далеко не определяет скорость работы этой таблицы. Грамотные индексы решают. (индексом должно быть всё, что используется для WHERE)
 
Так повелось, что boolean в проектах я не использую обычно. Одна из причин, например, для большей гибкости и совместимости между разными СУБД. Например, в том же Oracle SQL нету логического типа (Boolean). Видется мне, что это не престо так.
Т.е.
Код:
CREATE TABLE `tablename` (
  `TINYIN` tinyint(1) default NULL,
- так правильно? Вроде в Интернете тоже пишут что так и надо использовать.
Мне кажется, что лучше все же явно инициализировать нулем по умолчанию, потому что по-честному получается трехзначная логика правда/ложь/неопределенно. В текущей спецификации MySQL NULL и 0 одно и то же, но если в какой-то момент это станет не так, то на обнаружение и устранение этого уйдет прилично трудочасов.
 
NULL и 0 не одно и тоже - это надо помнить... NULL - ТЕКСТОВАЯ строка нулевой длинны, 0 же - цифра. Их значения в некоторых случаях приравнено, но типы данных разные!
 
На всех проектах используем tinyint и соответственно храним всегда 0 и 1. Как писали, из-за кол-ва символов :)
 
Статус
В этой теме нельзя размещать новые ответы.
Назад
Сверху