处理用户输入时为NULL与Empty

Dar*_*ein 6 database null

是的,另一个NULL vs空字符串问题.

我同意NULL意味着没有设置的想法,而空字符串意味着"一个空的值".这是我的问题:如果列的默认值为NULL,我如何允许用户输入该NULL.

假设在系统上创建了一个新用户.有一个名字和姓氏字段; 姓氏不需要姓氏.创建用户时,此人将看到2个文本输入,一个用于第一个,一个用于最后一个.该人选择仅输入姓氏.第一个名称在技术上没有设置.在插入期间,我检查每个字段的长度,将所有空字段设置为NULL.

查看数据库时,我看到未设置名字.立即想到的问题是,他们可能从未见过名字字段(即因为错误).但这种情况并非如此; 如果空白,他们就离开

所以,我的问题是,如何在接收用户输入时决定何时将字段设置为NULL或空字符串?你怎么知道用户想要在没有检测焦点的情况下设置字段,或者他们是否删除了值...或......或......?

相关问题:我应该使用NULL还是空字符串来表示表列中没有数据?

dkr*_*etz 8

我将打破模式,并说我总是将NULL用于零长度字符串,原因如下.

  1. 如果你开始细分空白的含义,那么你必须确保每个其他开发人员以相同的方式读取和写入它.

  2. 你如何按字母顺序排列?

  3. 您是否可以明确地确定用户何时省略输入值,与故意将其留空?

  4. 您如何明确地查询差异?查询屏幕用户可以使用标准输入表单语法指示NULL与空白吗?

  5. 在实践中,我从未被禁止使用此规则使用默认的,不令人惊讶的行为来读取和写入数据.如果我需要知道差异,我使用了一个布尔字段(更容易映射到明确的UI设备).在一种情况下,我使用触发器强制执行True => null值,但从未看到它被调用,因为BR层有效地过滤了条件.


tva*_*son 6

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


Cha*_*tin 5

你需要做的是弄清楚你想要的行为.关于如何解释名称字符串,没有一个固定的代数.

想想这里的状态机:你有几个状态的字段:它像你正在考虑"单元化"的状态,另一个"有目的地空"和第三个具有一些设定值的状态.你做的任何事情都会使得这个任务与你的程序的其余部分保持一致; 这听起来像是简单的映射

NULL→未初始化的
""→有目的地取消设置
名称→初始化.


Kib*_*bee 2

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

  • 我建议用户界面相反。不勾选则为空,勾选则启用该字段进行输入。这样会更直观。 (2认同)