gpt4 book ai didi

c# - SQL Server 在尝试设置 null 时向值 (char) 添加空格

转载 作者:行者123 更新时间:2023-12-03 07:35:37 25 4
gpt4 key购买 nike

我正在将数据从 SQL Server 提取到我的 C# 项目。我有一些逐页更新的文本框。我有一个文本框,它被设置为只接受两个字符,在数据库中设置为 char(2) 。如果我要删除这两个字符并单击按钮更新数据库并转到下一页,它会存储两个空白空间。我需要它是空的,没有空格。在我的其他文本框中,不会出现此问题。数据库允许数据为空。我可以在数据库中手动输入“null”,但我需要在删除这两个字符并更新它时完成此操作。

最佳答案

声明为 CHAR(2) 的列可能包含以下内容之一:

  • 2 个字符
  • NULL。

声明为 CHAR(2) 的列可能包含以下任何内容:

  • 0 个字符
  • 1 个字符
  • 3 个字符
  • 等等

当您尝试在列中存储除 2 个字符或 NULL 以外的任何内容时,数据库会以某种考虑不周的方便概念的名义来欺骗您:它不会生成错误,而是会存储除您将其存放起来。

(有趣的是,在做错事时收到错误,并且历史上一直被大多数程序员认为是一种不便。但没关系,这就是我们如何回答 stackoverflow 问题的方式。)

具体来说,您的数据库将用空格填充您存储的值,以匹配列的长度。因此,如果您尝试仅存储一个字符,它将添加一个空格。如果您尝试存储零个字符,它将添加两个空格。

可能的解决方案:

  • 如果您可以自由更改列的类型:

    将其声明为 VARCHAR 而不是 CHAR(2),以便它将准确包含您存储在其中的内容。

  • 如果您无权更改列的类型:

    您必须始终手动检查是否要在其中存储空字符串,如果是,则存储 NULL。

有关 Oracle 的说明

版本 11g 之前的 Oracle RDBMS(也许也在更新的版本中,我不确定,如果有人知道,请发表评论)将为您完成最后一次转换:如果您尝试存储空字符串,它将存储 NULL 代替。由于以下原因,这是极其非常危险的:

  • 这是数据库系统通过存储与您所要存储的内容非常不同的内容来欺骗您的又一个示例。

  • 它们对所有类型的字符列(甚至是 VARCHAR)应用相同的规则,这意味着即使在可以容纳空字符串的列中也不能有空字符串;你存储 NULL 或空字符串,你总是会得到 NULL。

  • 此行为与任何其他 RDBMS 的行为完全不同。

  • 该行为已修复,无法配置 Oracle 停止这样做。

关于c# - SQL Server 在尝试设置 null 时向值 (char) 添加空格,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44371928/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com