Я разрабатывал базу данных для сайта, где мне нужно использовать логический тип даты для хранения только двух состояний: истина или ложь. Я использую MySQL.
При разработке базы данных с помощью phpMyAdmin я обнаружил, что у меня есть как тип данных BOOLEAN, так и тип данных TINYINT.
Я просмотрел разные статьи, некоторые говорили, что TINYINT - это то же самое, что и BOOLEAN, без разницы. Некоторые говорят, что BOOLEAN в MySQL преобразуется в TINYINT.
МОЙ вопрос: если они оба одинаковые, почему их два? Их должен быть только один.
Вот ссылка на статьи, которые я читал:
http://www.careerride.com/MySQL-BOOL-TINYINT-BIT.aspx
http://dev.mysql.com/doc/refman/5.5/en/numeric-type -overview.html
BIT(1)
илиBIT(17)
дажеBIT(64)
Просто примечание для разработчиков php (мне не хватает необходимых точек stackoverflow, чтобы опубликовать это как комментарий) ... автоматическое (и тихое) преобразование в TINYINT означает, что php извлекает значение из столбца "BOOLEAN" как "0" или «1», а не ожидаемое (мной) истина / ложь.
Разработчик, который смотрит на SQL, используемый для создания таблицы, и видит что-то вроде: «some_boolean BOOLEAN NOT NULL DEFAULT FALSE», может разумно ожидать увидеть истинные / ложные результаты при извлечении строки, содержащей этот столбец. Вместо этого (по крайней мере, в моей версии PHP) результатом будет «0» или «1» (да, строка «0» или строка «1», а не int 0/1, спасибо, php).
Это гнида, но этого достаточно, чтобы модульные тесты не прошли.
источник
В новейших версиях MySQL есть новый
BIT
тип данных, в котором вы можете указать количество битов в поле, например,BIT(1)
для использования в качествеBoolean
типа, потому что это может быть только0
или1
.источник
Ссылка на версию MySql 5.1
================================================== =======================
https://dev.mysql.com/doc/refman/5.7/en/storage-requirements.html#data-types-storage-reqs-numeric
источник
Обзор числовых типов для MySQL гласит: BOOL, BOOLEAN: эти типы являются синонимами для TINYINT (1). Нулевое значение считается ложным. Ненулевые значения считаются истинными.
Смотрите здесь: https://dev.mysql.com/doc/refman/5.7/en/numeric-type-overview.html
источник