【问题标题】:Using blank values in database?在数据库中使用空白值?
【发布时间】:2014-04-02 18:43:01
【问题描述】:

当一个复选框未选中时,提交表单后,它会在 db 字段中产生一个空白值。

我可以在提交表单之前为空复选框赋值:

if (empty($checkbox1)){
 $checkbox1='none';
}

等等

在数据库中有一堆空字段还是在一堆字段中插入“none”更好? 在我看来,“none”字段是多余的,会占用更多空间......

【问题讨论】:

  • 不用担心空间问题。您所说的空间量可以忽略不计。这是过早的优化。
  • 好的,如果checkbox1、checkbox3被选中,那么它们将使用表单值进行更新,并且checkbox2、checkbox4、checkbox5应该更新为“none”还是留空?
  • 将它们设为空白,或者更好的是,将它们设为 NULL。

标签: php forms checkbox


【解决方案1】:

我认为您应该为该复选框分配一个 db 字段,该字段可以采用两个值:0 和 1。其中一个等于“已选中”,另一个等于“无”

【讨论】:

    【解决方案2】:

    您可以使用以下方法:enum、bit(1) 或 tinyint(1),因为您正在使用类似布尔值的变量。

    如果您正在查看性能,枚举和位之间的区别不是那个位:http://techhelplist.com/index.php/tech-tutorials/42-databases/65-mysql-performance-bit-vs-tinyint-vs-enum

    但是,如果您查看使用的存储空间,那么 enum 和 tinyint 都使用 8 字节的存储空间,而 bit(1) 仅使用 1 位。 mysql 中的数据类型 BOOLEAN 是 tinyint(1) 的同义词,因此请注意使用该类型。

    因此,与之前给出的枚举解决方案相比,您可以更好地使用 bit(1) 来存储复选框的结果。

    更多关于为什么不使用枚举的阅读:http://komlenic.com/244/8-reasons-why-mysqls-enum-data-type-is-evil/

    【讨论】:

      【解决方案3】:

      我这样做的方式是定义 DB 字段如下:

      Type: Enum
      Length/Values: 'yes', 'no'
      Default as defined: no
      

      使用这种方法,您只需在选中复选框(或更改状态)时进行更新。

      正如其他人所说,空间可以忽略不计。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2010-10-08
        • 2017-04-06
        • 1970-01-01
        • 1970-01-01
        • 2013-02-11
        • 2020-05-26
        相关资源
        最近更新 更多