将是/否单选按钮存储到 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 数据库中的主要内容,如果未能解决你的问题,请参考以下文章