Boolean vs tinyint (1) для булевых значений в MySQL. Sql тип boolean


PavelDev: Тип данных BOOLEAN

Сегодня я решил написать о языке PL/SQL. Пожалуй, в эту и следующие недели нужно активизироваться – и постараться опубликовать сразу несколько статей по PL/SQL, а то эти типы данных уж слишком много времени у меня заняли – очень долго до циклов и ветвлений иду, а они – одни из самых сложных в понимании будут (если вы, конечно, не программировали на других языках программирования), так что посмотрим.

Пользуюсь случаем – и поздравляю всех своих однополовцев с праздником 23 февраля. Удачи и всего всего. Чтобы поздравить своих друзей (знакомых, родственников) можно скачать скайп, установить его и начать всех поздравлять, эта программа вам очень поможет (к тому же – ведь восьмое марта на носу).

Я думаю, что с этим типом знакомы должны быть все, так что – особо его описывать не буду, но – все равно расскажу о некоторых особенностях.

Тип данных Boolean используется для хранения логических значений, которые можно использовать в логических операциях. Логические значений – это булевы значения True, False или Null (последнее означает, что значение отсутствует, неизвестно или не определено).

Чтобы задать элемент данных типа Boolean, необходимо всего-лишь объявить этот элемент с ключевым словом Boolean.

В SQL не существует эквивалента типа данных Boolean; таким образом, следующие действия невозможны:

  • Использование булевых переменных в операторах SQL;
  • Использование булевых параметров в функциях PL/SQL, вызываемых прямо из операторов языка SQL;
  • Использование булевых параметров во встроенных функциях SQL (например – различные функции форматирования – TO_CHAR и тд).

Значение True или False нельзя вставить в столбец базы данных. Значение столбца таблицы нельзя извлечь в переменную типа Boolean.

Для представления значений типа Boolean в качестве выходных значений и преобразований в другие типы данных (например, 0 или 1, да или нет, True или False и другие) следует использовать конструкции If – Then или Case (мы с ними чуть позже познакомимся).

Вот и все. Еще раз всех с праздником, Всем удачи. В самое ближайшее время еще опубликую статьи по языку PL/SQL.

paveldev.blogspot.com

[sqldatatypes] Какой тип данных MySQL используется для хранения логических значений [boolean]

Для MySQL 5.0.3 и выше вы можете использовать BIT . В руководстве написано:

Начиная с MySQL 5.0.3, тип данных BIT используется для хранения значений битового поля. Тип BIT (M) позволяет хранить значения M-бит. M может варьироваться от 1 до 64.

В противном случае, согласно руководству MySQL, вы можете использовать bool и boolean, которые в настоящий момент являются псевдонимами tinyint (1):

Bool, Boolean: Эти типы являются синонимами для tinyint (1). Значение нуля считается ложным. Ненулевые значения считаются истинными.

MySQL также заявляет, что:

Мы намерены реализовать полную обработку булевых типов в соответствии со стандартным SQL в будущей версии MySQL.

Ссылки: dev.mysql.com/doc/refman/5.5/en/numeric-type-overview.html

BTW: это всего лишь вопрос https://google.com/search?q=mysql+boolean+datatype .

Смешно, не так ли, эта ссылка, опубликованная несколько лет назад, стала рекурсивной.

Это изящное решение, которое я вполне понимаю, потому что он использует нулевые байты данных:

some_flag CHAR(0) DEFAULT NULL

Чтобы установить значение true, установите some_flag = '' и установите для него значение false, задайте some_flag = NULL .

Затем, чтобы проверить значение true, проверьте, не является ли some_flag IS NOT NULL , и для проверки на false, проверьте, является ли some_flag IS NULL .

(Этот метод описан в разделе «Высокопроизводительная MySQL: оптимизация, резервное копирование, репликация и многое другое» Джона Уоррена Ленца, Барона Шварца и Арьена Ленца).

Если вы используете тип BOOLEAN, это псевдоним TINYINT (1). Это лучше всего, если вы хотите использовать стандартизованный SQL и не против, чтобы поле могло содержать значение вне диапазона (в основном все, что не равно 0, будет «истинным»).

ENUM («False», «True») позволит вам использовать строки в вашем SQL, а MySQL будет хранить это поле внутри себя как целое число, где «False» = 0 и «True» = 1 на основе порядка Enum ,

В MySQL 5+ вы можете использовать поле BIT (1) для указания 1-битного числового типа. Я не считаю, что это фактически использует меньше места в хранилище, но снова позволяет ограничить возможные значения 1 или 0.

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

Бит полезен только по различным байтовым опциям (tinyint, enum, char (1)), если у вас много логических полей. Одно битовое поле по-прежнему занимает полный байт. Два битовых поля вписываются в тот же самый байт. Три, четыре, пять, шесть, семь, восемь. После чего они начинают заполнять следующий байт. В конечном итоге экономия настолько мала, что вам нужно сосредоточиться на тысячах других оптимизаций. Если вы не имеете дело с огромным количеством данных, эти несколько байтов не будут сильно отличаться. Если вы используете бит с PHP, вам нужно придать значения значениям входов и выходов.

Мне надоело пытаться получить нули, NULLS и «точно округлить петлю значений PHP, MySql и POST, поэтому я просто использую« Да »и« Нет ».

Это работает безупречно и не требует специального лечения, которое не является очевидным и легким в использовании.

code-examples.net

sql - Boolean vs tinyint (1) для булевых значений в MySQL

Какой тип столбца лучше всего использовать в базе данных MySQL для булевых значений? Я использую boolean, но мой коллега использует tinyint(1).

задан tom 20 сент. '10 в 16:21 источник поделиться

Здесь я собираюсь использовать другой подход и предположить, что для ваших коллег-разработчиков так же важно понимать ваш код, как и для компилятора/базы данных. Использование boolean может сделать то же самое, что и использование tinyint, однако оно имеет преимущество семантически передавать то, что ваше намерение, и что стоит того.

Если вы используете tinyint, не очевидно, что единственные значения, которые вы должны увидеть, равны 0 и 1. Логическое значение ALWAYS равно true или false.

ответ дан dj_segfault 20 сент. '10 в 18:10 источник поделиться

boolean не является отдельным типом данных в MySQL; это просто синоним tinyint. См. эту страницу в руководстве MySQL.

Лично я бы предложил использовать tinyint в качестве предпочтения, потому что boolean не делает то, что вы думаете, что он делает от имени, поэтому он делает потенциально вводящий в заблуждение код. Но на практическом уровне это действительно не имеет значения - они оба делают одно и то же, поэтому вы не получаете или не теряете ничего, используя либо.

ответ дан Spudley 20 сент. '10 в 16:26 источник поделиться

Мой опыт использования Dapper для подключения к MySQL заключается в том, что имеет значение. Я изменил бит с нулевым значением (1) на нулевую tinyint (1), используя следующий script:

ALTER TABLE TableName MODIFY Setting BOOLEAN null;

Затем Даппер начал бросать Исключения. Я попытался разглядеть разницу до и после script. И заметил, что бит (1) изменился на tinyint (1).

Затем я побежал:

ALTER TABLE TableName CHANGE COLUMN Setting Setting BIT(1) NULL DEFAULT NULL;

Что решило проблему.

ответ дан smerlung 04 сент. '17 в 11:45 источник поделиться

Хотя верно, что bool и tinyint(1) функционально идентичны, bool должен быть предпочтительным вариантом, поскольку он несет семантический смысл того, что вы пытаетесь сделать. Кроме того, многие ORM преобразуют bool в свой собственный логический тип языка программирования.

источник поделиться

Другие вопросы по меткам sql mysql

qaru.site