我通过(BDE)使用Paradox表。
我无法理解空和空字符串值在string字段中的处理方式(Paradox数据类型为"A")。
我的具体问题是如何确定字段值是空字符串还是空字符串。在数据库桌面工具中,它们似乎都是空字符串。
我需要这样做,因为我正在将数据(使用数据库桌面并以编程方式)迁移到Firebird,而似乎是空字符串的字段值都作为空值复制到Firebird .即使是属于索引!的字段,我如何区分真正的null和空字符串?这取决于悖论还是BDE?谢谢!
发布于 2012-11-08 04:40:12
空为空,认为是有害的
正如您所知道的,现代数据库实现包括" NULL“的概念,它是一个永远不匹配任何其他值的值,甚至是另一个NULL。
BDE及其祖先Paradox engine和Paradox for DOS不包括NULL的概念。BDE表中的任何数据类型都不允许像NULL这样的排除值。
BDE确实包含了空白的概念,但是对于某些类型来说,这只是一个特殊的带内值。空白匹配空白,没有其他。在数字字段中,空白与0是可区分的,但在alpha字段中,空白与零长度字符串相同。
显然,在过去的一段时间里,有人负责创建一个实用程序,以便将BDE表导入到SQL数据库中,但他并没有完全做到这一点。如果没有NULLs,他可能无法理解数据库,因此他猜测空白与NULL相同。从那以后,其他人都跟着他走了。
将BDE空白转换为SQL是错误的。这样做可以改变数据库的体系结构,并破坏任何相关应用程序的体系结构。从BDE表导入的数据不应包含NULL。
要么编写自己的导入过程,要么使用内置导入,然后仔细地对导入的数据进行后处理,将所有NULL转换为其他值。
空alpha值必须转换为零长度字符或VARCHAR值.
空白数字值必须转换为与其自身匹配的选定带内标志值。您可能必须保留一个特殊的值来表示BDE空白,除非可以使NaN或某些这样的值工作。在许多情况下,根据应用程序架构的不同,您将能够将BDE空白转换为SQL 0。
当然,如果您的SQL实现允许一个与自身匹配并与NULL相区别的空白数值,那么您的问题就会减少,因为您的数据库至少和BDE一样有能力。不过,您可能仍然不能使用内置的导入实用程序。
https://stackoverflow.com/questions/10228123
复制相似问题