好人,
我观察到 MS Access ORDER BY 子句以非 ASCII 方式对记录进行排序。这与 MySQL 不同——它通常是 ASCII 兼容的。让我给你一点背景,让你明白为什么这对我来说是个问题。
早在 2010 年,我就编写了一个通用数据库事务记录器。目标是检测(理论上)任何 SQL 数据库上发生的更改并将它们记录在另一个数据库中。为此,我使用了一个影子 MySQL 数据库,我在其中维护了整个源数据库的副本。影子数据库是使用 EAV 模型设计的,因此它与源数据库模式无关。
每隔一段时间,我都会读取源数据库和影子数据库,根据记录的主键对记录进行排序,并将记录格式化为一一对应。然后,我使用合并算法进行完整的数据库比较。
直到上周,当用户使用不总是字母数字的字符串主键针对 Access 数据库设置它时,此解决方案一直运行良好。突然间,该软件开始记录源数据库上未发生的幽灵事务。
经过仔细检查,我发现 MS Access 以不同于 MySQL 的方式对非字母数字字符进行排序。因此,我的合并算法(假定源记录和影子记录的排序顺序相似)开始失败。
现在,我想出了一种方法,我可以在使用它们之前调整我的软件以“治愈”这些主键,但如果我确切地知道 MS Access 排序方案的性质是什么,这将有很大帮助。任何想法都将受到高度赞赏。
PS:如果有什么需要澄清的,请告诉我。我试图避免输入太多可能无用的内容。