2016-07-20 1 views
0

Я пытаюсь сделать простой поиск в таблице, которая может быть на любом виде базы данных. Следующий запрос работает с большинством баз данных, но я не могу найти решение, которое работает на mysql. Таблицы в моей базе данных генерируются каркасом активных объектов, поэтому я не могу изменить имена или конфигурацию этих экземпляров.общий поиск в верхнем регистре на postgres и mysql не работает

Вот запрос, который отлично работает на всех базах данных, но MySQL:

выберите * от "AO_69D057_FILTER", где "СОВМЕСТНО" = истинным и "CONTAINS_PROJECT" = Истинные и UPPER ("FILTER_NAME"), как UPPER (» % рг% ').

По какой-то причине MySql не может использовать имя таблицы в двойных кавычках. Если я использую имя без кавычек, оно работает на MySQL, но не на Postgres. Postgres преобразует имя таблицы в нижний регистр, потому что это некорректно. AO генерирует имена таблиц в верхнем регистре.

Я также пытался использовать псевдоним, но это не может работать из-за иерархии оценки инструкции.

Любые предложения, как избавиться от проблемы с именем таблицы?

+0

Возможно дубликат [MySQL в двойных кавычках имена таблиц] (http://stackoverflow.com/questions/13884854/mysql -double-quoted-table-names) –

ответ

0

По умолчанию двойные кавычки используются для столбцов. Вы можете изменить его:

SET SQL_MODE=ANSI_QUOTES;

Вот документация об этом: http://dev.mysql.com/doc/refman/5.7/en/sql-mode.html

+0

Спасибо Diogo, но я ничего не могу изменить, поскольку мое приложение работает на экземплярах, установленных пользователем, о которых я не знаю. –

+0

Из http://dev.mysql.com/doc/refman/5.7/en/sql-mode.html: «каждое приложение может настроить свой режим сеанса SQL на свои собственные требования». – NovaDenizen

+0

Прежде всего спасибо за подсказку Diogo. Поскольку я использую ActiveObjects как ER-карту, у меня нет доступа к сеансу и подключению db. Я использовал взломать, чтобы переопределить эту ситуацию, я получаю настройки соединения с БД Mapper, прежде чем он попытается выполнить запрос. При этом я могу попросить объект ConnectionInfo, который сообщает мне, какая физическая БД используется под ним. Если это MySQL, я устанавливаю свойство, указанное в вашем комментарии. Это работает, хотя и довольно грязно. Я подал ошибку для АО, чтобы решить ее с сайта ER mapper: https://ecosystem.atlassian.net/browse/AO-3371 –

Смежные вопросы