Information ausblenden
Willkommen im Forum für alle Datenbanken! Registriere Dich kostenlos und diskutiere über DBs wie Mysql, MariaDB, Oracle, Sql-Server, Postgres, Access uvm

Problem mit Hochkomma <-> Anführungszeichen bei der String-Maskierung

Dieses Thema im Forum "MySQL und MariaDB" wurde erstellt von Chnutz, 14 Februar 2016.

  1. Chnutz

    Chnutz Benutzer

    Zunächst einmal Danke für die Aufnahme im Forum!

    Nun die Frage:
    Ich habe ein umfangreiches php-MySQL-Datenbank-Frontend geschrieben. In den MySQL-Abfragen habe ich die String-Werte alle in Anführungszeichen, Beispiel:
    INSERT INTO tabelle SET Beispielvariable = "Beispielwert"​

    Nun habe ich auf einen Localhost MySQL & php installiert, die Dateien übertragen und festgestellt, dass so gut wie keine Abfrage mehr funktioniert, weil lokal plötzlich nur Hochkommata zur Maskierung akzeptiert werden:
    INSERT INTO tabelle SET Beispielvariable = 'Beispielwert'
    Nach längerer, vergeblicher Startpage- und Manual-Suche möchte ich nun Euch fragen, ob bekannt ist, wo da ein Haken gesetzt oder herausgenommen werden muss, damit ich nicht alle Abfragen umschreiben muss?!

    Die neue DB ist MySQL 5.7.

    Herzlichen Dank schonmal!
     
  2. akretschmer

    akretschmer Datenbank-Guru

    Du hast Dich an das zu halten, was die Syntax vorschreibt. Mit " benennt man z.B. Spalten, mit ' Werte. Dein Insert Into ... Set ... erscheint mir auch falsch, das nur nebenbei.
     
  3. Chnutz

    Chnutz Benutzer

    So werden aus einer Frage zwei ;-)
    Kann es sein, dass Du eben in PostGreSQL unterwegs bist? Spalten benenne ich in MySQL doch eigentlich mit ` , oder verstehe ich Dich jetzt falsch?!

    Was erscheint Dir an der INSERT INTO ... SET ...-Syntax falsch? Hier ist sie doch an zweiter Stelle beschrieben:
    MySQL :: MySQL 5.7 Reference Manual :: 13.2.5 INSERT Syntax

    Geht übrigens auch - nur eben an allen anderen Servern außer dem neuen^^
     
  4. Chnutz

    Chnutz Benutzer

    Mit scheint, es ist irgendwo
    ANSI_QUOTES
    eingestellt, vom Verhalten könnte das stimmen, doch wo wird dieser Modus hinterlegt?
     
  5. ukulele

    ukulele Datenbank-Guru

    Jede SQL Variante hat so ihre eigene Deutung von ' ` und ". Du solltest dich an den gängigen Standard halten, auch wenn es sich vieleicht verstellen läßt. Ich kenne keine SQL Variante die Zeichenketten als Wert nicht mit ' akzeptiert, also würde ich das als gängig bezeichnen.

    Genauso ist
    INSERT INTO tbl_name (a,b,c) VALUES(1,2,3)
    üblich und geht in allen SQL Varianten. Das mit SET habe ich auch noch nie gesehen, auch wenn es MySQL gem. Doku kann.
     
  6. Chnutz

    Chnutz Benutzer

    Wie ich oben schrieb, ist es eine existierende und (bis auf diesen einen Rechner) funktionierende, umfangreiche Anwendung. Das bedeutet gut 50 Dateien voller SQL-Anweisungen.
    Ihr werdet verstehen, dass ich deshalb bevorzuge, die eine, oben genannte und für das Problem verantwortliche Einstellung zu ändern und nicht die 50 Dateien Code zu durchforsten und einzeln zu ändern, auch wenn der Code dann mal nicht so schön aussieht ;)

    Deshalb nochmal die Frage, ob evtl. jemand weiß, wie ich ANSI_QUOTES aus dem Mode herausbekomme?!

    Ich habe dazu Folgendes gefunden:

    SET sql_mode=(SELECT REPLACE(@@sql_mode,'<mode_to_remove>',''));

    Umgesetzt also:
    SET sql_mode=(SELECT REPLACE(@@sql_mode,',ANSI_QUOTES',''));

    Es sagt mir dann aber ohne Fehlermeldung "0 rows affected"

    Quelle des Vorschlags ist:
    John's Observation Loft: Adding or removing individual SQL modes in MySQL's sql_mode variable


    Abgesehen von dem Hochkomma-Problem bin ich aber neugierig:
    Gibt es eine Begründung außer der Schönheitsfrage, warum lieber VALUES als SET genommen werden sollte, z.B. Performanz?
     
  7. ukulele

    ukulele Datenbank-Guru

    Performance denke ich nicht. Schönheit würde ich auch nicht sagen aber du könntest z.B. Teile deines SQL Codes direkt auch auf anderen Systemen ausführen und Aussenstehende erkennen schneller was der Code macht.

    Im Prinzip kannst du ja auch Schwäbisch sprechen und die miesten Deutschen werden es vermutlich verstehen. Aber leichter wird es dadurch ja nicht.
     
  8. Chnutz

    Chnutz Benutzer

    Schnelle Lösung: Vorher entscheiden, welchen sql_mode man nutzen möchte bzw. Einstellung über
    SELECT @@sql_mode
    anzeigen lassen und die Einstellungen kopieren, die beibehalten werden sollen.
    Dann mit

    SET sql_mode 'hier Modes kommagetrennt einsetzen'

    den jeweiligen Mode setzen, in meinem Fall ohne ANSI_QUOTES.

    Schon geht die komplette Anwendung.

    Ich frage mich nur, wodurch die eigentlich bei Installation übliche Voreinstellung des Modes geändert wurde.
     
  9. Chnutz

    Chnutz Benutzer

    Das ist auf jeden Fall ein guter Hinweis, zusammen mit denen der Vorposter, das werde ich auf jeden Fall im Hinterkopf behalten.
     
Die Seite wird geladen...

Diese Seite empfehlen

  1. Diese Seite verwendet Cookies. Wenn du dich weiterhin auf dieser Seite aufhältst, akzeptierst du unseren Einsatz von Cookies.
    Information ausblenden