Paradox如何管理空值和空值?

blu*_*ish 1 string null firebird paradox bde

我正在通过Borland数据库引擎(BDE)使用Paradox表.

我无法实现在字符串字段中处理null空字符串值的方式(Paradox数据类型"A").

我的具体问题是如何确定字段值是空还是空字符串.在Database Desktop工具中,它们似乎都是空字符串.

我需要这个,因为我正在将数据(使用Database Desktop以及编程方式)迁移到Firebird数据库,并且看起来像空字符串字段值都被复制到Firebird作为空值 ...甚至属于索引的字段!如何区分真空和空字符串?它取决于Paradox还是BDE?谢谢!

A. *_*eri 6

BLANK为NULL认为有害

如您所知,现代数据库实现包括"NULL"的概念,这是一个永远不会匹配任何其他值的值,甚至是另一个NULL.

BDE及其祖先是Paradox引擎和Paradox for DOS,不包括NULL的概念.BDE表中的所有数据类型都不允许使用像NULL这样的排除值.

BDE 确实包含BLANK的概念,但这只是某些类型的特殊带内值.BLANK与BLANK匹配,没有别的.在数字字段中,BLANK可区别于0,但在字段中,BLANK与零长度字符串相同.

显然在昏暗的过去有一段时间,有人负责创建一个从BDE表导入SQL数据库的实用程序,他并不是很了解它.他可能无法在没有NULL的情况下查询数据库,因此他猜测BLANK与NULL相同.从那以后,其他所有人都跟着他的领先.

将BDE BLANK转换为SQL NULL是错误的.这样做会改变数据库的体系结构,并破坏任何相关应用程序的体系结构.从BDE表导入的数据永远不应包含NULL.

编写自己的导入过程,或使用内置导入,然后仔细后处理导入的数据,将所有NULL转换为其他值.

BLANK alpha值必须转换为零长度CHAR或VARCHAR值.

必须将BLANK数值转换为与自身匹配的选定带内标志值.您可能必须保留一个特殊值来表示BDE BLANK,除非NaN或其他一些可以使用.在许多情况下,根据应用程序体系结构,您可以将BDE BLANK转换为SQL 0.

当然,如果您的SQL实现允许BLANK数值与自身匹配并且可以与NULL区分,那么您的问题就会减少,因为您的数据库至少与BDE一样强大.但是,您可能仍然无法使用内置导入实用程序.