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





5 Answers

BOOL и BOOLEAN являются синонимами TINYINT(1) . Zero является false , все остальное true . Дополнительная информация here .

5.7 типы email

Поскольку у MySQL, похоже, нет какого-либо «булевского» типа данных, какой тип данных вы «злоупотребляете» для хранения истинной / ложной информации в MySQL?

Особенно в контексте написания и чтения из / в PHP-скрипт.

Со временем я использовал и видел несколько подходов:

  • tinyint, varchar, содержащие значения 0/1,
  • поля varchar, содержащие строки '0' / '1' или 'true' / 'false'
  • и, наконец, перечислить поля, содержащие два параметра: «true» / «false».

Ничто из перечисленного не кажется оптимальным. Я предпочитаю вариант tinyint 0/1, поскольку автоматическое преобразование типов в PHP дает мне логические значения довольно просто.

Итак, какой тип данных вы используете? Есть ли тип, предназначенный для булевых значений, которые я забыл? Вы видите какие-либо преимущества / недостатки, используя тот или иной тип?




На этот вопрос был дан ответ, но я решил, что заброшу свои 0,02 доллара. Я часто использую CHAR (0), где '' == true и NULL == false.

Из документов mysql

CHAR (0) также неплохо, если вам нужен столбец, который может принимать только два значения: столбец, который определен как CHAR (0), NULL занимает только один бит и может принимать только значения NULL и '' (пустая строка) ,




Я использую TINYINT (1) для хранения логических значений в Mysql.

Я не знаю, есть ли какое-то преимущество для использования этого ... Но если я не ошибаюсь, mysql может хранить логическое значение (BOOL) и хранить его как tinyint (1)

http://dev.mysql.com/doc/refman/5.0/en/other-vendor-data-types.html




Пока MySQL не реализует бит типа данных, если ваша обработка действительно нажата для пробела и / или времени, например, с транзакциями с большим объемом, создайте поле bit_flags именем bit_flags для всех ваших логических переменных и замаскируйте и сдвиньте бит, который вы хотите в своем SQL-запрос.

Например, если ваш левый бит представляет ваше поле bool, а 7 самых правых бит ничего не представляют, тогда ваше поле bit_flags будет равно 128 (двоичный 10000000). Маска (спрячьте) семь самых правых бит (с помощью побитового оператора & ) и сдвиньте 8-й бит семь пробелов вправо, в итоге получим 00000001. Теперь все ваше число (которое в данном случае равно 1).

SELECT (t.bit_flags & 128) >> 7 AS myBool FROM myTable t;

if bit_flags = 128 ==> 1 (true)
if bit_flags = 0 ==> 0 (false)

Вы можете запускать такие заявления, как вы тестируете

SELECT (128 & 128) >> 7;

SELECT (0 & 128) >> 7;

и т.п.

Поскольку у вас есть 8 бит, у вас есть потенциально 8 булевых переменных из одного байта. Некоторые будущие программисты неизменно используют следующие семь бит, поэтому вы должны маскировать. Не просто сдвиньтесь, либо создадите ад для себя и других в будущем. Удостоверьтесь, что у вас есть MySQL для маскировки и смещения - это будет значительно быстрее, чем использование языка веб-скриптов (PHP, ASP и т. Д.). Кроме того, убедитесь, что вы разместили комментарий в поле комментариев MySQL для поля bit_flags .

Вы найдете эти сайты полезными при реализации этого метода:




Обращаясь к этой ссылке Boolean datatype в Mysql , в зависимости от использования приложения, если требуется только 0 или 1 для хранения, бит (1) является лучшим выбором.






Related