Php 将“是/否”单选按钮存储到MySQL数据库中

Php 将“是/否”单选按钮存储到MySQL数据库中,php,jquery,html,forms,codeigniter,Php,Jquery,Html,Forms,Codeigniter,我见过一个Yes/No表单单选按钮值以几种不同的方式存储/保存。我想知道哪条路更好,为什么?这是一个PHP/MySQL应用程序,表单中有一个典型的是/否问题 1.)将其存储为1、0或null。1表示是,0表示否,null表示未回答 2.)将其存储为是、否、空。假设可以进行语言转换 3.)使用1、2和null以更好地区分这些值 谢谢,杰夫 编辑:我还必须提到,大多数问题都是由于jQuery/JavaScript以及比较和$()绑定引起的。使用TINYINT(1)。如果希望使用“未应答”选项,则允许

我见过一个Yes/No表单单选按钮值以几种不同的方式存储/保存。我想知道哪条路更好,为什么?这是一个PHP/MySQL应用程序,表单中有一个典型的是/否问题

1.)将其存储为1、0或null。1表示是,0表示否,null表示未回答

2.)将其存储为是、否、空。假设可以进行语言转换

3.)使用1、2和null以更好地区分这些值

谢谢,杰夫

编辑:我还必须提到,大多数问题都是由于jQuery/JavaScript以及比较和$()绑定引起的。

使用
TINYINT(1)
。如果希望使用“未应答”选项,则允许
NULL
。您还可以使用
BOOLEAN
,因为它只是上述数据类型的别名。MySQL推荐使用这种存储布尔数据的方法


更多详细信息:

我将使用0/1/null表示否/是/空白。0总是用作
false
,1总是用作
true

,因为MySQL有一个布尔类型,但它只是TINYINT的别名。我建议不要这样做,因为PHP==中的等号不能区分0和缺少值。您总是需要使用triple equal===并且很容易出错

至于你的选择:

  • 这似乎是PHP的自然选择,但是您必须小心区分0和缺少值,因此我不推荐它

  • 我不推荐这个

  • 可能,但对1和2的赋值有些随意,可能很难在代码中记住和读取


  • 我通常做的是,如果需要,在CHAR(1)字段中使用“Y”、“N”和NULL,它在代码中可读性很好,不会产生问题。

    我不知道这是否有帮助,但在我的系统中,我使用1作为yes,0作为no,no值作为NULL-或者如果必须指定,我在结构中设置了一个默认值

    我认为这个系统更灵活,你可以随时处理这些数据,例如,如果你不想显示0/1的值,你可以设置如下

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

    将此值与任何其他数据库值进行比较也更容易。

    由于mysql处理数字的速度更快(在搜索、排序等过程中), 在你的情况下占用的空间更少, 而且只有3个值(1,0 nul (l) 在二进制格式中,1和0只有一个有效位(0000000,&0000001),在进行任何比较的情况下,在遍历这些列时,速度应该保持更高,查询所需的时间将更少

    所以我认为你可以选择第一种选择。

    我认为这就是类型的含义。您可以如下设置存储字段类型:

    ENUM('no','yes')
    

    并允许NULL作为默认值。如果答案为“否”-字段值实际上为0(索引为“否”),如果答案为“是”,则字段值为1。您将有一个很好的列表示形式——“是”和“否”,而不是1和0。尽管这些值实际存储为0和1。我认为使用TINYINT是一个优势。

    @Codemonkey更新了我的答案,提出了你的建议以及我为什么不使用MySQL BOOLEAN。经过一些挖掘,我发现了这个。看来我错了。为tinyint投票。