True / False против 0/1 в mySQL

Что быстрее в базе данных MySQL? Booleans, или использовать ноль и единицу для представления логических значений? У моего интерфейса только есть кнопка "да / нет".

 gus27 авг. 2013 г., 13:39
У меня есть связанное наблюдение при использовании MySQL с MySqlDataReader для C # .NET. Когда я создаю столбец типа BOOLEAN, он заканчивается как TINYINT (1), а значения выглядят как 0 и 1 в PHPMyAdmin. Однако при программном выборе SELECT с использованием MySqlDataReader возвращаемыми значениями являются строки & quot; True & quot; и & quot; False & quot ;, (точная заглавная буква). Это хорошо работает с C # .NET bool.Parse (), который принимает только строки & quot; True & quot; и "Ложь". Я предполагаю, что MySqlDataReader специально создан для удобства.
 Caltor17 дек. 2014 г., 12:47
Вы используете переключатель "Да / Нет?!?" Что не так с флажком / флажком?
 Xynariz24 февр. 2014 г., 19:16
Обратите внимание, что MySql теперь имеетBIT тип. Увидетьthis answer для дополнительной информации.

Ответы на вопрос(4)

Bit также вариант, еслиtinyint не по вашему вкусу. Несколько ссылок:

Which MySQL data type to use for storing boolean values What is the difference between BIT and TINYINT in MySQL?

Не удивительно, что больше информации о числовых типах доступнов руководстве.

Еще одна ссылка:http://blog.mclaughlinsoftware.com/2010/02/26/mysql-boolean-data-type/

И цитата из комментария раздела статьи выше:

TINYINT(1) isn’t a synonym for bit(1). TINYINT(1) can store -9 to 9. TINYINT(1) UNSIGNED: 0-9 BIT(1): 0, 1. (Bit, literally).

Редактировать: это редактирование (и ответ) только отдаленно связано с исходным вопросом ...

Дополнительные цитаты Джастина Рованга и автора maclochlainn (раздел комментариев связанной статьи).

Excuse me, seems I’ve fallen victim to substr-ism: TINYINT(1): -128-+127 TINYINT(1) UNSIGNED: 0-255 (Justin Rovang 25 Aug 11 at 4:32 pm)

True enough, but the post was about what PHPMyAdmin listed as a Boolean, and there it only uses 0 or 1 from the entire wide range of 256 possibilities. (maclochlainn 25 Aug 11 at 11:35 pm)

 04 авг. 2014 г., 10:19
@cnst Смотрите правку. Весь ответ совершенно не связан с первоначальным вопросом, но, по крайней мере, он дает некоторую информацию о предмете. Кстати: простоselect * from table_x отображает всю стоимостьtinyint(1) столбец, даже если он состоит из двух или трех цифр.
 29 июл. 2014 г., 19:27
Вы не правы; TINYINT (1) может хранить более различные значения, чем это;(1) Предел влияет только на то, как эти значения отображаются.

В MySQL - «ИСТИНА» и "ЛОЖЬ" синонимы для TINYINT (1).

Поэтому, в принципе, это то же самое, но MySQL конвертирует в 0/1, поэтому просто используйте TINYINT, если вам это легче

постскриптум производительность, вероятно, будет настолько незначительной (если вообще будет), что если вам нужно будет запросить StackOverflow, то это не повлияет на вашу базу данных :)

Решение Вопроса

Некоторые «внешние интерфейсы», с «Использовать логические значения» опция включена, все столбцы TINYINT (1) будут обрабатываться как логические, и наоборот.

Это позволяет вам использовать в приложении TRUE и FALSE вместо 1 и 0.

Это никак не влияет на базу данных, поскольку она реализована в приложении.

Там не совсемBOOLEAN введите MySQL. BOOLEAN - это просто синоним TINYINT (1), а TRUE и FALSE - синонимы 1 и 0.

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

Вы должны использовать тот метод, который позволяет более эффективно кодировать, хотя отказ от использования этой функции может снизить зависимость от этого конкретного «внешнего интерфейса». поставщик.

 28 апр. 2017 г., 16:43
@MarcusAdams & quot; синоним & quot; тогда неверное слово; & Quot; псевдоним & Quot; лучше
 05 дек. 2014 г., 15:30
@MattZukowski,TRUE а такжеFALSE являются синонимами для1 а также0, но обратное неверно.0 не является синонимомFALSE, а также1 не является синонимомTRUEи вот почемуTRUE IS 1 выдаст синтаксическую ошибку, но1 IS TRUE не буду.
 04 дек. 2014 г., 21:44
Это не совсем правильно.TRUE а такжеFALSE не обязательно эквивалентны1 а также0, С одной стороны, они ведут себя очень по-разному, когда используются в сочетании сIS оператор. Например,WHERE NOT(something IS 1) будет синтаксическая ошибка, ноWHERE NOT(something IS TRUE) работает.

Если вы в производительности, то стоит использовать тип ENUM. Вероятно, это будет быстрее на больших таблицах из-за лучшей производительности индекса.

Способ его использования (источник:http://dev.mysql.com/doc/refman/5.5/en/enum.html):

CREATE TABLE shirts (
    name VARCHAR(40),
    size ENUM('x-small', 'small', 'medium', 'large', 'x-large')
);

Но я всегда говорю, что объясняя запрос так:

EXPLAIN SELECT * FROM shirts WHERE size='medium';

расскажет вам много информации о вашем запросе и поможет построить лучшую структуру таблицы. Для этого полезно позволить phpmyadmin предложить структуру таблицы таблицы - но это более длительная возможность оптимизации, когда таблица уже заполнена большим количеством данных.

Ваш ответ на вопрос