2

好人,

我观察到 MS Access ORDER BY 子句以非 ASCII 方式对记录进行排序。这与 MySQL 不同——它通常是 ASCII 兼容的。让我给你一点背景,让你明白为什么这对我来说是个问题。

早在 2010 年,我就编写了一个通用数据库事务记录器。目标是检测(理论上)任何 SQL 数据库上发生的更改并将它们记录在另一个数据库中。为此,我使用了一个影子 MySQL 数据库,我在其中维护了整个源数据库的副本。影子数据库是使用 EAV 模型设计的,因此它与源数据库模式无关。

每隔一段时间,我都会读取源数据库和影子数据库,根据记录的主键对记录进行排序,并将记录格式化为一一对应。然后,我使用合并算法进行完整的数据库比较。

直到上周,当用户使用不总是字母数字的字符串主键针对 Access 数据库设置它时,此解决方案一直运行良好。突然间,该软件开始记录源数据库上未发生的幽灵事务。

经过仔细检查,我发现 MS Access 以不同于 MySQL 的方式对非字母数字字符进行排序。因此,我的合并算法(假定源记录和影子记录的排序顺序相似)开始失败。

现在,我想出了一种方法,我可以在使用它们之前调整我的软件以“治愈”这些主键,但如果我确切地知道 MS Access 排序方案的性质是什么,这将有很大帮助。任何想法都将受到高度赞赏。

PS:如果有什么需要澄清的,请告诉我。我试图避免输入太多可能无用的内容。

4

1 回答 1

0

几年前,我在这方面遇到了困难。很抱歉我没有保留该解决方案,但它使用了 VBA,而且不简洁或优雅。

我将表作为 DAO 记录集打开,在记录中前进,并使用该strcomp()功能来比较键。我用二进制/文本选项做了很多实验strcomp(),我相信最终有必要插入一个错误处理组件!

这个讨论可能是相关的。还有这个这个

于 2012-07-16T15:58:04.050 回答