Ankündigung

Einklappen
Keine Ankündigung bisher.

Postleitzahl - richtiger Feldtyp

Einklappen

Neue Werbung 2019

Einklappen
X
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • Postleitzahl - richtiger Feldtyp

    Servus!

    Bei meiner Datenbank tritt, jetzt wo sie sich füllt, ein kleiner Fehler auf.

    Ich habe ein PLZ-Feld mit Typ "int" angelegt. Dabei ist wohl keine führende "0" machbar.
    Die Suche erfolgt jedoch ausschließlich über die PLZ, von daher ist das eher blöd.

    Daher die Frage: Welchen Typ nehme ich denn am besten dafür?

    Danke und Gruß
    Piet

  • #2
    Einen String (varchar).
    Über 90% aller Gewaltverbrechen passieren innerhalb von 24 Stunden nach dem Konsum von Brot.

    Kommentar


    • #3
      nimm lieber decimal(5,0) unsigned zerofill

      Zur Erklärung .. das Feld nimmt 5 Ziffern auf , und wird von Links mit 0 aufgefüllt, falls du Postleitzahlen aus Sachsen bzw südliches Sachsen-Anhalt (0xyza) bekommst - klappt in meiner Datenbank jedenfalls wunderbar
      "Irren ist männlich", sprach der Igel und stieg von der Drahtbürste [IMG]http://www.php.de/core/images/smilies/icon_lol.gif[/IMG]

      Kommentar


      • #4
        Postleitzahlen sind keine Zahlen im eigentlichen Sinne. Insbesondere machen arithmetische Operationen auf Postleitzahlen keinen Sinn. Postleitzahlen sind Zeichenfolgen. In Deutschland sind alle in dieser Zeichenfolge zulässigen Zeichen zufälligerweise Ziffern (daher die etwas irreführende Bezeichnung Postleitzahl). In anderen Ländern kommen auch Buchstaben und Sonderzeichen in Postleitzahlen vor. Der korrekte Typ ist also auf keinen Fall irgend ein numerischer.
        Meinungen, die ich geäußert habe, sind nicht notwendigerweise meine eigenen. Abweichungen von der deutschen Rechtschreibung unterliegen dem Urheberrecht, dürfen aber unter den Bedingungen von verwendet werden

        Kommentar


        • #5
          ich glaub der Threadersteller möchte DEUTSCHE Postleitzahlen speichern, sonst würd er ja auch nicht extra auf die führende Null hinweisen, die Probs macht ..

          aber mit beiden Lösungen kommt er zum Ziel ...
          "Irren ist männlich", sprach der Igel und stieg von der Drahtbürste [IMG]http://www.php.de/core/images/smilies/icon_lol.gif[/IMG]

          Kommentar


          • #6
            Naja sobald dann doch nur mal jemand aus Österreich dabei ist, wird die führende Null mindestens stören. Von anderen Ländern ganz zu schweigen, also lieber von Anfang an CHAR oder VARCHAR, dann gibt es später keine Probleme.
            [IMG]https://g.twimg.com/twitter-bird-16x16.png[/IMG][URL="https://twitter.com/fschmengler"]@fschmengler[/URL] - [IMG]https://i.stack.imgur.com/qh235.png[/IMG][URL="https://stackoverflow.com/users/664108/fschmengler"]@fschmengler[/URL] - [IMG]http://i.imgur.com/ZEqflLv.png[/IMG] [URL="https://github.com/schmengler/"]@schmengler[/URL]
            [URL="http://www.schmengler-se.de/"]PHP Blog[/URL] - [URL="http://www.schmengler-se.de/magento-entwicklung/"]Magento Entwicklung[/URL] - [URL="http://www.css3d.net/"]CSS Ribbon Generator[/URL]

            Kommentar


            • #7
              ich glaub der Threadersteller möchte DEUTSCHE Postleitzahlen speichern
              Darauf kommt es beim Design aber nicht an! Postleitzahl – Wikipedia
              Eine Postleitzahl (Abk. PLZ) ist eine Ziffern- oder Buchstaben-/Ziffern-Kombination[...]
              Und wie mimomamu schon gesagt hat:
              Insbesondere machen arithmetische Operationen auf Postleitzahlen keinen Sinn.
              [URL]http://hallophp.de[/URL]

              Kommentar


              • #8
                varchar(10), dann kann man auch andere Länder abbbilden. Mehr als 10 Zeichen hat afaik kein Land.

                Kommentar


                • #9
                  Für varchar spricht auch, dass es auch sog. PLZ-Bereiche gibt, die durch die ersten zwei Bytes beschrieben werden, und nach denen man ggf. auch selektieren möchte.

                  SELECT plz FROM tbl WHERE SUBSTRING(plz,1,2) = '47'
                  [PHP]if ($var != 0) {
                  $var = 0;
                  }[/PHP]

                  Kommentar


                  • #10
                    überraschenderweise kann ich mit einer ganz ähnlichen Abfrage auch bei meinem decimal Feld zum Ziel kommen

                    SELECT plz FROM tbl WHERE plz LIKE '47%'
                    "Irren ist männlich", sprach der Igel und stieg von der Drahtbürste [IMG]http://www.php.de/core/images/smilies/icon_lol.gif[/IMG]

                    Kommentar


                    • #11
                      String Operatoren auf numerischen Feldern sind aber eine ganz schöne Zweckentfremdung. Und funktioniert das wirklich mit führenden Nullen?
                      [IMG]https://g.twimg.com/twitter-bird-16x16.png[/IMG][URL="https://twitter.com/fschmengler"]@fschmengler[/URL] - [IMG]https://i.stack.imgur.com/qh235.png[/IMG][URL="https://stackoverflow.com/users/664108/fschmengler"]@fschmengler[/URL] - [IMG]http://i.imgur.com/ZEqflLv.png[/IMG] [URL="https://github.com/schmengler/"]@schmengler[/URL]
                      [URL="http://www.schmengler-se.de/"]PHP Blog[/URL] - [URL="http://www.schmengler-se.de/magento-entwicklung/"]Magento Entwicklung[/URL] - [URL="http://www.css3d.net/"]CSS Ribbon Generator[/URL]

                      Kommentar


                      • #12
                        es tut ... benutz es ja seit über 2 Monaten in meiner Datenbank - mit Eingabe der Parameter über eigenes Formular

                        eine Suche, die zu LIKE '01%' führt , wird auch korrekt mit 01079 für Dresden beantwortet (Beispiel)
                        "Irren ist männlich", sprach der Igel und stieg von der Drahtbürste [IMG]http://www.php.de/core/images/smilies/icon_lol.gif[/IMG]

                        Kommentar


                        • #13
                          Ändert nichts daran, das Postleitzahl irreführend ist. Ich arbeite sehr viel mit Adressen, auch aus dem nahen und fernen Ausland, und die Postleitzahlen sind deutlich unterschiedlich.

                          Ausserdem: Kann jemand ahnen, ob nicht auch deutsche PLZ irgendwann ihre Form ändern (wie sie es bereits getan haben, die älteren werden sich daran erinnern, das Postleitzahlen einmal 4-stellig waren und ein Stadtteil mit einer zusätzlichen Kodierung angehängt war: 5000 Köln 60 z.B.)

                          Wer sich den Kopf frei halten will und sich nicht später mit Anpassungen rumärgern möchte, weil eine ausländische Adresse in der Applikation nicht verarbeitet werden kann, benutzt VARCHAR.
                          Über 90% aller Gewaltverbrechen passieren innerhalb von 24 Stunden nach dem Konsum von Brot.

                          Kommentar


                          • #14
                            Zitat von eagle275 Beitrag anzeigen
                            überraschenderweise kann ich mit einer ganz ähnlichen Abfrage auch bei meinem decimal Feld zum Ziel kommen

                            SELECT plz FROM tbl WHERE plz LIKE '47%'
                            Weil die MySQL einen Autocast vornimmt. Andere Datenbanken tun das nicht zwingend. Wenn du wirklich keine arithmetischen Operationen ausführen möchtest, wäre CHAR(5) eigentlich das richtige. CHAR eigentlich im Sinne einer beliebigen Bytefolge. Dann ist ein Vergleich mit LIKE auch in Ordnung.
                            "[URL="http://www.youtube.com/watch?v=yMAa_t9k2VA&feature=youtu.be&t=25s"]Mein Name ist Lohse, ich kaufe hier ein.[/URL]"

                            Kommentar


                            • #15
                              Zitat von lstegelitz Beitrag anzeigen
                              Ausserdem: Kann jemand ahnen, ob nicht auch deutsche PLZ irgendwann ihre Form ändern (wie sie es bereits getan haben, die älteren werden sich daran erinnern, das Postleitzahlen einmal 4-stellig waren und ein Stadtteil mit einer zusätzlichen Kodierung angehängt war: 5000 Köln 60 z.B.)
                              oder West- und Ost-Postleitzahlen.
                              Da die sich teilweise überschnitten haben, musste man ein W- bzw. ein O- vorne dranfügen.

                              Zum Glück sagt man im englischen unmissverständlicher Postal Code.

                              Und spätestens mit USA-Adressen ist man dann an den 10 Zeichen dran (#####-####)

                              Kommentar

                              Lädt...
                              X