postgres 和 mysql 上的通用大写搜索不起作用

generic upper case search on postgres and mysql not working

我正在尝试对可以在任何类型的数据库中的 table 进行简单搜索。以下查询适用于大多数数据库,但我找不到适用于 mysql 的解决方案。 我数据库中的 table 是由活动对象框架生成的,因此我无法更改这些实例的名称或配置。

这是在所有数据库上都能正常工作的查询,但 MySQL:

select * 来自 "AO_69D057_FILTER" 其中 "SHARED" = true AND "CONTAINS_PROJECT" = true AND UPPER("FILTER_NAME") like UPPER('%pr%' ).

MySql 出于某种原因无法在双引号中使用 table 名称。如果我使用不带引号的 table 名称,它适用于 MySQL 但不适用于 Postgres。 Postgres 正在将 table 名称转换为小写,因为它没有被引用。 AO 正在生成大写的 table 个名称。

我也试过使用别名,但由于语句的求值层次而无法使用。

关于如何解决 table 名称问题的任何建议?

默认情况下,双引号用于列。 您可以更改它:

SET SQL_MODE=ANSI_QUOTES;

这是关于它的文档: http://dev.mysql.com/doc/refman/5.7/en/sql-mode.html

我遇到了同样的问题。我select根据我得到的异常进行查询。在数据库搜索的第一次调用中,我尝试 不带引号 如果它失败,然后我尝试 带引号 。然后我相应地设置 useQueryWithQuotes 变量,以便在以后的调用中我不需要检查异常。下面是我正在使用的代码片段。

private Boolean useQueryWithQuotes=null;
private final String queryWithQuotes = "\"OWNER\"=? or \"PRIVATE\"=?";
private final String queryWithoutQuotes = "OWNER=? or PRIVATE=?";

public Response getReports() {
  List<ReportEntity> reports = null;
  if(useQueryWithQuotes==null){
    synchronized(this){
      try {
        reports = new ArrayList<ReportEntity>( Arrays.asList(ao.find(ReportEntity.class, Query.select().where(queryWithoutQuotes, getUserKey(), false))) );
        useQueryWithQuotes = false;
      } catch (net.java.ao.ActiveObjectsException e) {
        log("exception:" + e);
        log("trying query with quotes");
        reports = new ArrayList<ReportEntity>(  Arrays.asList(ao.find(ReportEntity.class, queryWithQuotes, getUserKey(), false)));
        useQueryWithQuotes = true;
      }
    }
  }else{
    String query = useQueryWithQuotes ? queryWithQuotes : queryWithoutQuotes;
    reports = new ArrayList<ReportEntity>(  Arrays.asList(ao.find(ReportEntity.class, query, getUserKey(), false)));
  }
  ...
}