我在本地开发中运行MySQL数据库,但是部署到使用Postgres的Heroku时遇到了问题。 Heroku几乎处理所有内容,但是我的不区分大小写的Like语句变成了区分大小写。 我可以使用iLike语句,但是我的本地MySQL数据库无法处理。
有没有一种最佳方法编写不区分大小写的查询,可以兼容MySQL和Postgres?还是我需要根据我的应用程序连接的数据库编写单独的Like和iLike语句?
我在本地开发中运行MySQL数据库,但是部署到使用Postgres的Heroku时遇到了问题。 Heroku几乎处理所有内容,但是我的不区分大小写的Like语句变成了区分大小写。 我可以使用iLike语句,但是我的本地MySQL数据库无法处理。
有没有一种最佳方法编写不区分大小写的查询,可以兼容MySQL和Postgres?还是我需要根据我的应用程序连接的数据库编写单独的Like和iLike语句?
将字符串转换为大写是最好的选择,因为它涵盖了三个最常用的Rails数据库后端的兼容语法。PostgreSQL、MySQL和SQLite都支持这种语法。它有一个(轻微的)缺点,就是你必须在应用程序或条件字符串中将搜索字符串转换为大写,使其看起来有点丑陋,但我认为你获得的兼容性使它值得。
MySQL和SQLite3都有一个不区分大小写的LIKE运算符。只有PostgreSQL有一个区分大小写的LIKE运算符和一个PostgreSQL特定的(根据手册)ILIKE运算符,用于不区分大小写的搜索。您可以在Rails应用程序的条件中指定ILIKE而不是LIKE,但请注意,在MySQL或SQLite下,该应用程序将停止工作。
第三个选项可能是检查您正在使用哪个数据库引擎,并相应地修改搜索字符串。这可能更好地通过黑客/猴子补丁ActiveRecord的连接适配器来完成,并让PostgreSQL适配器在查询执行之前修改查询字符串以将“LIKE”替换为“ILIKE”。然而,与简单地将两个术语转换为大写等更简单的方法相比,这种解决方案最为复杂,我认为这不值得努力(尽管您会因此获得很多赞誉)。