Database 处理用户输入时为NULL vs Empty
是的,另一个空字符串与空字符串的问题 我同意NULL表示未设置,而空字符串表示“空值”。我的问题是:如果列的默认值为NULL,我如何允许用户输入该NULL 假设在系统上创建了一个新用户。有一个名字和姓氏字段;姓氏是必需的,而名字不是必需的。创建用户时,用户将看到两个文本输入,一个用于第一个,一个用于最后一个。此人选择只输入姓氏。从技术上讲,没有设置第一个名称。在插入过程中,我检查每个字段的长度,将所有空字段设置为NULL 在查看数据库时,我看到没有设置第一个名称。立即浮现在脑海中的问题是,可能他们从未看到“名字”字段(即,由于一个错误)。但事实并非如此;如果是空白的话,他们就离开了 所以,我的问题是,在接收用户输入时,您如何决定何时将字段设置为NULL或空字符串?您如何知道用户希望在未检测到焦点或删除值…或…或…的情况下不设置字段Database 处理用户输入时为NULL vs Empty,database,null,Database,Null,是的,另一个空字符串与空字符串的问题 我同意NULL表示未设置,而空字符串表示“空值”。我的问题是:如果列的默认值为NULL,我如何允许用户输入该NULL 假设在系统上创建了一个新用户。有一个名字和姓氏字段;姓氏是必需的,而名字不是必需的。创建用户时,用户将看到两个文本输入,一个用于第一个,一个用于最后一个。此人选择只输入姓氏。从技术上讲,没有设置第一个名称。在插入过程中,我检查每个字段的长度,将所有空字段设置为NULL 在查看数据库时,我看到没有设置第一个名称。立即浮现在脑海中的问题是,可能他
相关问题:我从未在生产代码中使用过空值。对于任何应用程序,空字符串都是空白姓名字段、电话号码或年收入的精细哨兵值。也就是说,我相信你会发现它有些用处,但我只是觉得它被过度使用了。然而,如果我使用空值,我想我会在任何我想表示空值的地方使用它。我尽量使事情简单化。在本例中,我将使first name列不可为null,并允许空白。否则,您将有三个案例需要处理:
进一步回答您的问题:输入数据的用户可能不(也不应该)知道“null”是什么以及它与“空”的比较。这个问题应该在系统中得到清晰一致的解决,而不是在UI中。您需要做的是找出您想要的行为。关于如何解释名称字符串,没有一个固定的代数 想象一下这里的状态机:你有几个字段有几个状态:它慢悠悠的就像你在考虑一个“统一化”的状态,另一个是“故意空”的状态,第三个是带有一些设定值的状态。你所做的任何与你课程的其他部分相一致的事情都会被发现;这听起来像是简单的映射 空的→ 未初始化
"" → 故意取消设置
名字→ 初始化 如果用户提供空字符串,我总是从数据库的角度将其视为null。此外,我通常会修剪字符串输入以删除前导/尾随空格,然后检查是否为空。在使用varchar()类型的数据库中,这是一个小小的胜利,它还减少了搜索的次数,因为我只需要检查
name is null
而不是name is null或name=''
您也可以用另一种方法,将null转换为''。无论哪种方式,请选择一种方式并保持一致。在引用实际数据时,我几乎从不使用NULL。当用于外键时,我会说NULL是有效的,但它对于用户输入的数据几乎从来都不有效。一个可能经常出现的例外是不存在的日期,例如带有“终止日期”字段的员工数据库。在这种情况下,所有当前员工在该字段中的值都应为NULL。至于让他们实际输入一个空值,对于真正需要空值的值,我会在输入字段旁边放一个复选框,这样用户就可以打开和关闭它来查看对应的空值(或者以更方便用户的方式,无)。当启用复选框将字段设置为null时,相应的文本框应该被禁用,如果已经关联了null值,则它应该以禁用状态开始,并且只有在用户取消选中null复选框时才会启用。我将打破这种模式,并说我将始终对零长度字符串使用null,原因如下
虽然您的示例主要针对字符串,但我想说我对数字和布尔字段使用null。 帐户余额为0对我来说是非常不同的,因为它是空的。对于布尔人来说也是一样,如果人们参加了一个答案有对有错的多项选择题测试,那么知道有人回答的是对还是错或者根本没有回答是非常重要的。
如果在这些情况下不使用null,我需要有一个额外的表或不同的设置来查看是否有人回答了问题。例如,您可以使用-1表示未填充,0表示false,1表示true,但是您使用的数字字段本质上是布尔值。我一直使用
NULL
表示未初始化