【发布时间】:2012-06-27 19:25:30
【问题描述】:
我在各种不同的数据库类型(Microsoft SQL2005、MySql 和 IBM Informix、Oracle)上都有相同的数据表,我需要对表中的数据生成一个 SHA-1 哈希结果,该结果在不同的数据库类型中是相同的数据库类型。
我正在尝试确定完成此任务的最佳方法,到目前为止,这是我想出的:
- 使用 .NET SqlDataAdapter,从所需表中选择 * 到 数据表。
- 通过 List.Sort() 对列名进行排序以确保一致 数据库类型之间的排序
- 对于每一行,执行如下哈希:
- 将每个列值转换为字符串并附加到 rowString,在 上面确定的顺序
- 对整个 rowString 进行哈希处理以获得 rowHash 并将其添加到列表中。
- 接下来,按照 SHA-1 值对所有 rowHash 值进行排序,并对 结果获得最终的表哈希。这应该照顾 行以不同顺序返回的问题 数据库类型。
我会遇到此实施的任何问题吗?比如来自不同数据库的数据类型导致不同的字符串结果?
另外,排序有必要吗?我假设除非在查询中定义,否则不能保证列和行的顺序,并且我希望它尽可能动态。
谢谢。
【问题讨论】:
-
您能否添加有关表架构的信息以及您对总数据量的最大估计。此外,表中的数据是静态的吗?您是否生成哈希以便在给定时间点比较两个或多个提供者中的同一个表?
-
如果我理解,你有相同的数据,存储在一个表中,在使用不同数据库服务器软件的多个数据库服务器中。您想知道数据是否确实相同。并决定计算整个表的哈希值并使用该哈希值来比较差异。
-
面对数据库服务器软件中不同的 null 定义,相等意味着什么? Oracle 不能在
varchar或varchar2字符串中保存零字符串'',因为他们选择使''等同于null。在其他数据库中,至少是 MS SQL Server,''不等于null。 -
Alex:不,我不能向表模式添加任何信息,并且只有读取权限。数据是静态的,是的,哈希用于随时比较多个提供者之间的同一张表。谢谢
-
香农:是的,这就是我想要做的事情
标签: c# mysql sql-server database oracle