Database design 在MySQL数据库中存储空字符串与空字符串?

Database design 在MySQL数据库中存储空字符串与空字符串?,database-design,null,string,Database Design,Null,String,我有一个PHP/MySQL应用程序,它在某些情况下将“空白”值存储为'(空字符串),在其他情况下存储为NULLs 使用这种混合格式肯定会在比较时产生问题,所以我想知道哪种存储机制更好'或NULL?虽然这令人困惑,但实际上您应该存储NULL,原因有很多: 在大多数数据库中,检查null通常比检查空字符串快 Null通常表示“我不知道”,空字符串表示“我知道:它是空的”。它提供了更好的语义 好了,比较空字符串要比比较空字符串快。谢谢@Damir的引用-真不敢想象会这样做!非常可怕!写入数据库时,如果

我有一个PHP/MySQL应用程序,它在某些情况下将“空白”值存储为
'
(空字符串),在其他情况下存储为
NULL
s


使用这种混合格式肯定会在比较时产生问题,所以我想知道哪种存储机制更好<代码>'或
NULL

虽然这令人困惑,但实际上您应该存储NULL,原因有很多:

  • 在大多数数据库中,检查null通常比检查空字符串快
  • Null通常表示“我不知道”,空字符串表示“我知道:它是空的”。它提供了更好的语义

  • 好了,比较空字符串要比比较空字符串快。谢谢@Damir的引用-真不敢想象会这样做!非常可怕!写入数据库时,如果某个字段没有内容,我是否应该将其保存为NULL?是的,如果该字段指示未知或不可知的值,则没有内容为NULL。例如,如果您将我的“全名”输入到数据库中,那么您可以为我的中间名使用的唯一值可能是NULL。我知道描述我中间名字的字符串是“”还是“Laurence”。想象一个空字符串,比如0,一个定义的值,其中该值为零,NULL为“不知道”或“不知道”是,但如果您从HTML表单中获取数据,对于用户尚未填写的字段,通常会发送一个空字符串。如果您不检查它,并且直接使用HTML表单中的参数“编写”更新,那么最终将插入空字符串而不是空字符串。那么,更好的方法是什么呢?存储空字符串还是空字符串@Karl以及我建议存储空值,除非您知道实际值为“”;这意味着我们知道这里没有价值。这可能意味着必须处理空字符串到空字符串的转换,例如@SimoneGianni的HTML表单示例。我还认为,出于性能和逻辑原因,最好使用空值。