Сохранение переключателя Да / Нет в базе данных MySQL - PullRequest
5 голосов
/ 26 сентября 2011

Я видел, как значение радиокнопок Да / Нет сохранялось / сохранялось несколькими способами.Интересно, какой путь лучше и почему?Это для приложения PHP / MySQL с типичным вопросом Да / Нет как частью формы.

1.) Сохраните его как 1, 0 или ноль.1 - «Да», 0 - «Нет», а «ноль» - без ответа.

2.) Сохраните его как «Да», «Нет», «ноль».Предположим, что можно выполнить преобразование языка.

3.) Используйте 1, 2 и ноль, чтобы лучше различать значения.

Спасибо, Джефф

Редактировать: я тожеНеобходимо отметить, что большинство проблем возникало из-за jQuery / JavaScript, а также сравнений и привязок $ ().

Ответы [ 6 ]

6 голосов
/ 26 сентября 2011

Используйте TINYINT(1).Разрешить NULL, если вы хотите вариант «не ответил».Вы также можете использовать BOOLEAN, так как это просто псевдоним для вышеупомянутого типа данных.Этот способ хранения логических данных рекомендуется MySQL.

Подробнее: Какой тип данных MySQL использовать для хранения логических значений

4 голосов
/ 26 сентября 2011

Поскольку MySQL имеет тип BOOLEAN, но это просто псевдоним TINYINT. Я рекомендую против этого, потому что знак равенства в PHP == не отличит 0 от отсутствия значения. Вам всегда нужно было бы использовать тройное равенство ===, и было бы легко ошибиться.

Что касается ваших вариантов:

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

  2. Я бы не рекомендовал этот.

  3. Возможно, но присвоение 1 и 2 несколько произвольно и может быть трудно запомнить и прочитать в коде.

Обычно я использую «Y», «N» и NULL, если необходимо, в поле CHAR (1), он хорошо читается в коде и не создает проблем.

0 голосов
/ 26 сентября 2011

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

ENUM('no','yes')

и разрешить NULL в качестве значения по умолчанию. Если ответ «нет», то значение поля будет фактически 0 (индекс «нет») и 1, если ответ «да». И у вас будет хорошее представление столбца - «да» и «нет» вместо 1 и 0. Хотя значения будут фактически сохранены как 0 и 1. Я думаю, что преимущество использования TINYINT.

0 голосов
/ 26 сентября 2011

, поскольку числа обрабатываются mysql быстрее (при поиске, сортировке и т. П.), Это занимает меньше места в вашем случае, а также имеется только 3 значения (1, 0, nul l) и в двоичном формате 1 и 0иметь только один значащий бит (0000000, & 0000001), скорость в случае любых сравнений при обходе этих столбцов должна оставаться выше, а запросы будут занимать меньше времени.

, поэтому я думаю, что вы можете пойти первымопция.

0 голосов
/ 26 сентября 2011

Я не знаю, помогает ли это, но в моей системе я использую 1 как да, 0 как нет и просто значение NO как ноль - или если мне нужно указать, я устанавливаю значение по умолчанию в структуре.

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

if(table.field == 1)
    echo yes;
else
    echo no;

Также сравнивая этоЗначение для любой другой базы данных проще.

0 голосов
/ 26 сентября 2011

Я бы пошел с 0/1 / ноль для Нет / Да / Пусто.0 всегда используется как false и 1 для true.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...