gpt4 book ai didi

sql - Openbase SQL 区分大小写的怪癖 ('=' 与 LIKE)- 移植到 MySQL

转载 作者:可可西里 更新时间:2023-11-01 08:38:29 30 4
gpt4 key购买 nike

我们正在将以前使用 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 调用的一些智能正则表达式替换可能会成功,但我们宁愿找到不同的方式)

最佳答案

另一个想法 .. MySQL 是否提供类似用户定义函数的功能?然后,您可以编写不区分大小写(ci_like 左右)的 like 的 UDF 版本,并将所有 like 的更改为 ci_like。可能比用正则表达式调用 lower in .. 更容易做到。

关于sql - Openbase SQL 区分大小写的怪癖 ('=' 与 LIKE)- 移植到 MySQL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/377664/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com