blu*_*ish 1 string null firebird paradox bde
我正在通过Borland数据库引擎(BDE)使用Paradox表.
我无法实现在字符串字段中处理null和空字符串值的方式(Paradox数据类型"A").
我的具体问题是如何确定字段值是空还是空字符串.在Database Desktop工具中,它们似乎都是空字符串.
我需要这个,因为我正在将数据(使用Database Desktop以及编程方式)迁移到Firebird数据库,并且看起来像空字符串的字段值都被复制到Firebird作为空值 ...甚至属于索引的字段!如何区分真空和空字符串?它取决于Paradox还是BDE?谢谢!
如您所知,现代数据库实现包括"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一样强大.但是,您可能仍然无法使用内置导入实用程序.
| 归档时间: |
|
| 查看次数: |
2333 次 |
| 最近记录: |