2012-11-16 10 views
5

Ich versuche, mich mit Postgres (9.2) nach einem guten Stück von MySQL (5.1) Bedienung vertraut zu machen, da ich von einer Handvoll MySQL's gotchas gebissen worden bin. in meinem ersten fünf Minuten mit Postgres Allerdings lief ich in einem der its gotchas, die ich sicher Treffer alle bin:Warum schreibt PostgreSQL alles in Kleinbuchstaben?

  • Standardmäßig konvertiert PostgreSQL alles, was nicht zitiert Fall zu senken.

Dies ist nicht zu große Sache für mich, da es ein paar offensichtliche Abhilfen sind:

  • alles in Anführungszeichen kapseln.
  • Lassen Sie alles kleingeschrieben werden.

Aber ich frage mich, warum. Wenn ich bedenke, wie viele Konflikte ich mir durch diese Designentscheidung vorstelle, bin ich überrascht, dass ich im Internet keine Logik finden konnte. Hat jemand eine gründliche Erklärung oder vorzugsweise einen Link zu einem Entwickler-Manifest, warum Postgres so entworfen wurde? Ich bin interessiert.

+0

Fragen Sie nach? http://stackoverflow.com/questions/153944/is-sql-syntax-case-sensitive?rq=1 –

+3

AFAIK, so dass die Standard-unquoted Identifikatoren in Großbuchstaben gefaltet werden soll, [faltet PostgreSQL Fall senken] (http : //stackoverflow.com/a/8736088/479863) statt. Das Falten in Groß- oder Kleinbuchstaben sollte nicht wichtig sein, es sei denn, Sie geben nur Ihre Kennungen an, aber wenn Sie das tun, dann verdienen Sie, was Sie bekommen. Du kannst gerne Tischpfannkuchen (...) 'und' wählen * aus Pfannkuchen 'kreieren, einfach nicht 'Tisch" Pfannkuchen "(...)' kreieren und versuchen, 'aus Pfannkuchen' auszuwählen *. MySQL-Leute scheinen diese seltsame Angewohnheit zu haben, alles zu quecken, diese Gewohnheit zu verlieren. –

+0

@muistooshort Ich habe im Allgemeinen behauptet, dass die SQL-Spezifikation nicht angibt, ob Groß-/Kleinschreibung in Groß- oder Kleinschreibung geändert werden muss, sondern nur, dass sie auftreten muss. Weißt du, wo genau angegeben wird, in Großbuchstaben zu falten? (Ich suche nach Referenzen, finde aber nicht viel, was im Moment nützlich ist). –

Antwort

6

Der SQL-Standard legt fest, dass nicht angebene Bezeichner in Großbuchstaben gefaltet werden. Viele andere RDBMS folgen dem Standard auf diese Weise. Firebird und Oracle machen beides. Dies bedeutet, dass die Übereinstimmung von Bezeichnern standardmäßig nicht zwischen Groß- und Kleinschreibung unterscheidet. Dieses Verhalten ist sehr wichtig, wenn es um Kompatibilität in grundlegenden Abfragen geht. In dieser Hinsicht ist das Verhalten von MySQL ein echter Ausreißer.

Jedoch weicht PostgreSQL von der Norm, die von Fall zu senken Falten. Es gibt allgemeine Gründe, warum dies als lesbarer angesehen wird, usw., da Sie case für die Syntax verwenden können. Etwas wie:

SELECT foo FROM bar WHERE baz = 1; 

Dies ist natürlicher, wenn Fälle zu niedrigeren gefaltet werden. Die alternative Faltung Gegenteil wäre:

select FOO from BAR where BAZ = 1; 

Im Allgemeinen wie das frühere Verhalten (in Kleinbuchstaben Falten) becasue es die SQL-Operationen besser betont, während auf dem anderen Fall Falten de-betont die Operationen und betont die Kennungen. Angesichts der Komplexität vieler Anfragen denke ich, dass das erste besser funktioniert.

Im Allgemeinen ist die meist Diskussion, die ich auf dem Postgres gesehen habe Mailing-Listen hat, dass jeder das Standard-mandatierten Verhalten stimmt ist gebrochen. Das oben Gesagte ist mein Verständnis der Probleme.

+0

Ich verstehe nicht den Kontext der Zeile "In dieser Hinsicht ist das Verhalten von MySQL ein echter Ausreißer". Meinst du "Postgres" statt "MySQL"? Oder gibt es hier einen anderen Kontext für 'MySQL', den ich verpasst habe? –

+0

Verweis auf die MySQL-Fehler und PostgreSQL-Fehler. –

Verwandte Themen