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

Posted

技术标签:

【中文标题】将是/否单选按钮存储到 MySQL 数据库中【英文标题】:Storing a Yes / No radio button into a MySQL database 【发布时间】:2011-11-24 21:34:59 【问题描述】:

我看到一个是/否表单单选按钮值以几种不同的方式存储/保存。我想知道哪种方式更好,为什么?这是针对带有典型是/否问题作为表单一部分的 php/mysql 应用程序。

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

2.) 将其存储为 Yes、No、null。假设可以进行语言转换。

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

谢谢,杰夫

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

【问题讨论】:

【参考方案1】:

我认为这就是 ENUM 类型的用途。您可以像这样设置存储字段类型:

ENUM('no','yes')

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

【讨论】:

经过一番挖掘后,我发现了这个***.com/questions/4297149/…。所以看来我错了。投票支持 tinyint。【参考方案2】:

由于 MySQL 有一个 BOOLEAN 类型,但它只是 TINYINT 的别名。我建议不要这样做,因为 PHP == 中的等号无法区分 0 和缺少值。你总是需要使用三等号 === 并且很容易出错。

至于你的选择:

    这似乎是 PHP 的自然选择,但是你必须小心区分 0 和缺乏价值,所以我不推荐它。

    我不会推荐这个。

    可以,但是对 1 和 2 的赋值有些随意,在代码中可能难以记忆和阅读。

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

【讨论】:

@Codemonkey 用你的建议更新了我的答案以及我为什么不使用 MySQL BOOLEAN。【参考方案3】:

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

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

【讨论】:

【参考方案4】:

我不知道它是否有帮助,但在我的系统中,我使用 1 表示是,0 表示否,只使用 NO 值作为 null - 或者如果我必须指定我在结构中设置一个默认值。

我认为这个系统更灵活,您可以随时使用这些数据进行操作,例如,如果您不想显示 0/1 值,您可以设置类似

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

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

【讨论】:

【参考方案5】:

我会选择 0/1/null 来表示 No/Yes/Blank。 0 始终用作false,1 始终用作true

【讨论】:

【参考方案6】:

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

更多详情:Which MySQL data type to use for storing boolean values

【讨论】:

以上是关于将是/否单选按钮存储到 MySQL 数据库中的主要内容,如果未能解决你的问题,请参考以下文章

iOS 中单选按钮的实现

Axure:切换单选按扭,控制界面显示不同内容

如何以编程方式更改表格单元格中单选按钮组的单选按钮?

跪求:在ASP中单选按钮怎么用FOR语句输出

在 GridLayout 中居中单选按钮

如何删除表格视图单元格中单选按钮的索引路径?