Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Database 处理用户输入时为NULL vs Empty_Database_Null - Fatal编程技术网

Database 处理用户输入时为NULL vs Empty

Database 处理用户输入时为NULL vs Empty,database,null,Database,Null,是的,另一个空字符串与空字符串的问题 我同意NULL表示未设置,而空字符串表示“空值”。我的问题是:如果列的默认值为NULL,我如何允许用户输入该NULL 假设在系统上创建了一个新用户。有一个名字和姓氏字段;姓氏是必需的,而名字不是必需的。创建用户时,用户将看到两个文本输入,一个用于第一个,一个用于最后一个。此人选择只输入姓氏。从技术上讲,没有设置第一个名称。在插入过程中,我检查每个字段的长度,将所有空字段设置为NULL 在查看数据库时,我看到没有设置第一个名称。立即浮现在脑海中的问题是,可能他

是的,另一个空字符串与空字符串的问题

我同意NULL表示未设置,而空字符串表示“空值”。我的问题是:如果列的默认值为NULL,我如何允许用户输入该NULL

假设在系统上创建了一个新用户。有一个名字和姓氏字段;姓氏是必需的,而名字不是必需的。创建用户时,用户将看到两个文本输入,一个用于第一个,一个用于最后一个。此人选择只输入姓氏。从技术上讲,没有设置第一个名称。在插入过程中,我检查每个字段的长度,将所有空字段设置为NULL

在查看数据库时,我看到没有设置第一个名称。立即浮现在脑海中的问题是,可能他们从未看到“名字”字段(即,由于一个错误)。但事实并非如此;如果是空白的话,他们就离开了

所以,我的问题是,在接收用户输入时,您如何决定何时将字段设置为NULL或空字符串?您如何知道用户希望在未检测到焦点或删除值…或…或…的情况下不设置字段


相关问题:

我从未在生产代码中使用过空值。对于任何应用程序,空字符串都是空白姓名字段、电话号码或年收入的精细哨兵值。也就是说,我相信你会发现它有些用处,但我只是觉得它被过度使用了。然而,如果我使用空值,我想我会在任何我想表示空值的地方使用它。

我尽量使事情简单化。在本例中,我将使first name列不可为null,并允许空白。否则,您将有三个案例需要处理:

  • 空白名字
  • 空名字
  • 非空名字
  • 如果您选择“blank is null”或“null is blank”,那么您可以减少到两种情况。两个比三个好


    进一步回答您的问题:输入数据的用户可能不(也不应该)知道“null”是什么以及它与“空”的比较。这个问题应该在系统中得到清晰一致的解决,而不是在UI中。

    您需要做的是找出您想要的行为。关于如何解释名称字符串,没有一个固定的代数

    想象一下这里的状态机:你有几个字段有几个状态:它慢悠悠的就像你在考虑一个“统一化”的状态,另一个是“故意空”的状态,第三个是带有一些设定值的状态。你所做的任何与你课程的其他部分相一致的事情都会被发现;这听起来像是简单的映射

    空的→ 未初始化
    "" → 故意取消设置

    名字→ 初始化

    如果用户提供空字符串,我总是从数据库的角度将其视为null。此外,我通常会修剪字符串输入以删除前导/尾随空格,然后检查是否为空。在使用varchar()类型的数据库中,这是一个小小的胜利,它还减少了搜索的次数,因为我只需要检查
    name is null
    而不是
    name is null或name=''
    您也可以用另一种方法,将null转换为''。无论哪种方式,请选择一种方式并保持一致。

    在引用实际数据时,我几乎从不使用NULL。当用于外键时,我会说NULL是有效的,但它对于用户输入的数据几乎从来都不有效。一个可能经常出现的例外是不存在的日期,例如带有“终止日期”字段的员工数据库。在这种情况下,所有当前员工在该字段中的值都应为NULL。至于让他们实际输入一个空值,对于真正需要空值的值,我会在输入字段旁边放一个复选框,这样用户就可以打开和关闭它来查看对应的空值(或者以更方便用户的方式,无)。当启用复选框将字段设置为null时,相应的文本框应该被禁用,如果已经关联了null值,则它应该以禁用状态开始,并且只有在用户取消选中null复选框时才会启用。

    我将打破这种模式,并说我将始终对零长度字符串使用null,原因如下

  • 如果您开始对空白的含义进行精细切片,那么您必须以某种方式确保每个其他开发人员都以相同的方式读写它

  • 你怎么按字母顺序排列

  • 与故意将值留空相比,您能否明确地确定用户何时遗漏了输入值

  • 您将如何明确地查询差异?查询屏幕用户是否可以使用标准输入表单语法指示NULL与blank

  • 在实践中,我从未被禁止使用默认值读写数据,使用此规则的行为并不奇怪。如果我需要知道区别,我会使用一个布尔字段(它更容易映射到明确的UI设备)。在一个例子中,我使用触发器强制执行True=>null值,但从未看到它被调用,因为BR层有效地过滤掉了条件


  • 虽然您的示例主要针对字符串,但我想说我对数字和布尔字段使用null。 帐户余额为0对我来说是非常不同的,因为它是空的。对于布尔人来说也是一样,如果人们参加了一个答案有对有错的多项选择题测试,那么知道有人回答的是对还是错或者根本没有回答是非常重要的。
    如果在这些情况下不使用null,我需要有一个额外的表或不同的设置来查看是否有人回答了问题。例如,您可以使用-1表示未填充,0表示false,1表示true,但是您使用的数字字段本质上是布尔值。

    我一直使用
    NULL
    表示未初始化