Хранение кнопки "Да/Нет" в базе данных MySQL

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

1.) Сохраните его как 1, 0 или null. 1 - Да, 0 - Нет, а null - не ответил.

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

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

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

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

+5
26 сент. '11 в 2:48
источник поделиться
6 ответов

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

Что касается ваших опций:

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

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

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

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

+4
26 сент. '11 в 2:54
источник

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

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

+6
26 сент. '11 в 2:53
источник

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

ENUM('no','yes')

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

0
26 сент. '11 в 3:06
источник

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

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

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

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

0
26 сент. '11 в 2:54
источник

Я бы пошел с 0/1/null для No/Yes/Blank. 0 всегда используется как false и 1 для true.

0
26 сент. '11 в 2:54
источник

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

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

0
26 сент. '11 в 3:03
источник

Посмотрите другие вопросы по меткам или Задайте вопрос