BLANK 作为 NULL 被认为是有害的
如您所知,现代数据库实现包括“NULL”的概念,它是一个永远不会匹配任何其他值的值,即使是另一个 NULL。
BDE 及其祖先 Paradox 引擎和 Paradox for DOS不包括 NULL 的概念。BDE 表中的所有数据类型都不允许像 NULL 这样的排除值。
BDE确实包含 BLANK 的概念,但这只是某些类型的特殊带内值。BLANK 匹配 BLANK,仅此而已。在数字字段中,BLANK 与 0 可区分,但在 alpha 字段中,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 实现允许一个与自身匹配并且可与 NULL 区分开来的 BLANK 数值,那么您的问题就会减少,因为您的数据库至少与 BDE 一样有能力。不过,您可能仍然无法使用内置的导入实用程序。