Seite 1 von 1
SqlQuery funktioniert unter MySQL aber nicht unter Postgres
Verfasst: 3. November 2010 09:10
von gboelter
Hallo!
Ich habe hier eine simple Query, naemlich
die unter MySQL einwandfrei funktioniert.
Wenn ich versuche selbige Query unter PostgreSQL auszufuehren, also mit QPSQL statt QMYSQL, dann bekomme ich das hier zurueck:
ERROR: column "name" does not exist
LINE 1: SELECT name, nummer FROM lizenz
Selbstverstaendlich existiert das Feld und mit dem sqlbrowser aus den QT-Demos kann ich einwandfrei drauf zugreifen.
Ok, in Postgres direkt muesste ich's ja so schreiben:
aber sollte das nicht der Treiber entsprechend umsetzen?
Kennt sich da jemand aus?
Verfasst: 3. November 2010 09:28
von pfid
Naja, wenn die Syntax bei PSQL anders ist als bei MySQL kann der Treiber da auch nix dafür. Der Treiber ändert ja auch nicht die str_to_date's in to_date's wenn du Oracle verwendest...
Sprich: Ich halte es für unwahrscheinlich, dass der SQL Treiber deinen Query-String parst, um festzustellen, welche SQL-Variante es ist, um es dann in die des Treibers zu übersetzen.
Verfasst: 3. November 2010 11:05
von gboelter
pfid hat geschrieben:Naja, wenn die Syntax bei PSQL anders ist als bei MySQL kann der Treiber da auch nix dafür.
Nun ja, es muss aber doch eine bessere Loesung geben, als alle Queries mehrfach zu konstruieren und dann mit entsprechenden IF-Abfragen die jeweils richtige auszusuchen.
Verfasst: 3. November 2010 11:27
von Christian81
Vielleicht ist PosrtGres ja Case-Sensistitv - Du schreibst einmal 'Name' und in der Fehlermeldung steht 'name'. Hatte eigentlich nie Probleme mit Postgres in der Richtung.
Verfasst: 3. November 2010 11:45
von gboelter
Christian81 hat geschrieben:Vielleicht ist PosrtGres ja Case-Sensistitv - Du schreibst einmal 'Name' und in der Fehlermeldung steht 'name'. Hatte eigentlich nie Probleme mit Postgres in der Richtung.
Hallo Christian,
stimmt, die Fieldnames sind in diesem Falle case sensitiv. Durchaus denkbar, dass da irgendwie ein Zusammenhang besteht.
Allerdings steht in der Abfrage 'Name' und das entsprechende Feld heisst auch 'Name'. Warum dann in der Fehlermeldung nur noch 'name' auftaucht ist mir bis dato noch ein Raetsel.
Nun ja, ich werd mal weiter forschen ...
Verfasst: 3. November 2010 12:03
von gboelter
Christian81 hat geschrieben:Vielleicht ist PosrtGres ja Case-Sensistitv
Danke Christian,
Du hattest genau die richtige Eingebung.
Die Felder waren in der Tabelle als case-senstiv angelegt, und anscheinend will Postgres dann die Feldnamen als "Fieldname" uebergeben haben.
Ich hab das case sensitive jetzt rausgenommen, und schon akzeptiert Postgres meine Queries.
Verfasst: 4. November 2010 11:16
von gboelter
Fall noch mal jemand vor diesem Problem steht, hier ist die Loesung:
Standard Groß- und Kleinschreibung von Namen
Wenn man einen Namen in Anführungszeichen setzt, spielt die Groß- und Kleinschreibung eine Rolle. Namen in Anführungszeichen werden von PostgreSQL 1:1 übernommen. Namen ohne Anführungszeichen werden immer in Kleinbuchstaben umgewandelt.