我们正在将以前使用 Openbase 7 的应用程序移植到现在使用 MySQL 5.0。
OB 7 在区分大小写方面确实有非常糟糕的定义(即未记录的)行为。我们现在只是在使用 MySQL 尝试相同的查询时才发现这一点。
看起来 OB 7 处理使用“=”的查找与使用“LIKE”的查找不同:如果您有两个值“a”和“A”,并使用 WHERE f="a" 进行查询,那么它只会找到“ a”字段,而不是“A”字段。但是,如果您使用 LIKE 而不是“=”,那么它会同时找到两者。
我们对 MySQL 的测试表明,如果我们使用非二进制排序规则(例如 latin1),那么“=”和“LIKE”都会不区分大小写。然而,为了模拟 OB 的行为,我们只需要让“=”区分大小写。
我们现在正试图弄清楚如何在 MySQL 中处理这个问题,而不必为我们所有的查询添加大量的 LOWER() 函数调用(有很多!)。
我们可以完全控制 MySQL 数据库,这意味着我们可以随意选择它的排序模式(幸运的是,我们的表名和唯一索引不受区分大小写问题的影响)。
任何建议如何以最少的代码更改模拟 MySQL 上的 OpenBase 行为?
(我意识到在我们的源代码中添加 LOWER 调用的一些智能正则表达式替换可能会起到作用,但我们宁愿找到不同的方法)