2016-07-20 4 views
0

Ich versuche eine einfache Suche auf einer Tabelle, die auf jeder Art von Datenbank sein kann. Die folgende Abfrage arbeitet mit den meisten Datenbanken, aber ich kann keine Lösung finden, die auf mysql funktioniert. Die Tabellen in meiner Datenbank werden vom Framework für aktive Objekte generiert, sodass ich die Namen oder die Konfiguration dieser Instanzen nicht ändern kann.generische Großbuchstaben Suche auf Postgres und MySQL funktioniert nicht

ist die Abfrage, die auf alle Datenbanken, aber MySQL funktioniert gut:

select * from "AO_69D057_FILTER" where "shared" = true AND "CONTAINS_PROJECT" = true und obere ("FILTER_NAME") wie UPPER (‘ % pr% ').

MySql ist nicht in der Lage, den Tabellennamen aus irgendeinem Grund in doppelten Anführungszeichen zu verwenden. Wenn ich den nicht angegebenen Tabellennamen verwende, funktioniert er auf MySQL, aber nicht auf Postgres. Postgres konvertiert den Tabellennamen in Kleinbuchstaben, da er nicht in Anführungszeichen steht. AO erzeugt die Tabellennamen in Großbuchstaben.

Ich habe auch versucht, einen Alias ​​zu verwenden, aber das kann wegen der Bewertungshierarchie der Anweisung nicht funktionieren.

Irgendwelche Vorschläge, wie man das Tabellennamenproblem loswird?

+0

Mögliche Duplikat [mysql doppelten Anführungszeichen Tabellennamen] (http://stackoverflow.com/questions/13884854/mysql -double-quoted-table-names) –

Antwort

0

Standardmäßig werden doppelte Anführungszeichen für Spalten verwendet. Sie können es ändern:

SET SQL_MODE=ANSI_QUOTES;

Hier ist die Dokumentation über sie: http://dev.mysql.com/doc/refman/5.7/en/sql-mode.html

+0

Vielen Dank Diogo, aber ich kann nichts ändern, da meine App auf von Kunden installierten Instanzen läuft, von denen ich nichts weiß. –

+0

Von http://dev.mysql.com/doc/refman/5.7/en/sql-mode.html: "jede Anwendung kann seinen Session SQL-Modus auf seine eigenen Anforderungen einstellen." – NovaDenizen

+0

Zunächst einmal danke für den Hinweis Diogo. Da ich ActiveObjects als ER-Mapper verwende, habe ich keinen Zugriff auf die Session und die db-Verbindung. Ich benutzte einen Hack, um diese Situation zu überschreiben, ich erhalte die DB-Verbindungseinstellungen des Mappers, bevor er versucht, die Abfrage auszuführen. Wenn ich das tue, kann ich nach einem ConnectionInfo-Objekt fragen, das mir sagt, welche physikalische DB darunter verwendet wird. Wenn es MySQL ist, setze ich die Eigenschaft, die du in deinem Kommentar angegeben hast. Das funktioniert, obwohl es ziemlich dreckig ist. Ich habe einen Fehler für AO eingereicht, um es von ER Mapper-Website zu lösen: https://ecosystem.atlassian.net/browse/AO-3371 –

Verwandte Themen