Formulartextfelder d. Länge X vs. Varchar(Y)-Speicherung

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

  • Formulartextfelder d. Länge X vs. Varchar(Y)-Speicherung

    Hallo liebe PHP-Resource-Gemeinde,

    um es schnell auf den Punkt zu bringen: Ich habe ein Formular mit div. Feldern und möchte die eingegebenen Daten in einer Datenbank speichern. Mein Problem nun ist, dass ich eine Maximallänge der Eingabe angeben möchte und die Daten UTF-8-kodiert speichere. Durch das UTF-8 verändert sich jedoch die Länge des Eingabe- bzw. Speicherstring, da ja z. B. Umlaute o. Ä. mit mehreren Zeichen i. d. DB gespeichert werden.
    Kann man nun irgendwie festlegen, wie groß das Varchar-Feld für z. B. ein 250 Zeichen langes Formularfeld sein muss?

    Vielen Dank für alle Antworten!

  • #2
    Hallo,

    es heißt ja varchar und nicht varbyte, weil es X Zeichen speichern kann, auch wenn es X + k Bytes sind. Die Antwort lautet also: 250

    Gruß,

    Amica
    [COLOR="DarkSlateGray"]Hast du die [COLOR="DarkSlateGray"]Grundlagen zur Fehlersuche[/color] gelesen? Hast du Code-Tags benutzt?
    Hast du als URL oder Domain-Beispiele example.com, example.net oder example.org benutzt?
    Super, danke!
    [/COLOR]

    Kommentar


    • #3
      Ja schon klar, nur wenn ich dem User mitteile "nur 250 Zeichen" und das ganze utf8-kodiert (wird ja seitens MySQL ausgeführt) speichere, wird z. B. ein ü in 2 Zeichen übersetzt. D. h. ich muss das doch berücksichtigen in meiner DB, da dann ja aus 250 Zeichen sehr viel mehr werden können. Oder stelle ich mich da gerade zu blöd an.

      Kommentar


      • #4
        Nein, ein ü ist ein Zeichen, dass es intern zwei Byte sind, spielt absolut keine Rolle. Hör auf, Zeichen und Byte zu verwechseln

        Es ist so, wie ich sage: varchar(255) nimmt auch 255 'ü's, probier's einfach aus mit varchar(10), wenn du mir sowieso nicht glauben willst.

        Edit: Oder sieh ins Manual, dafür ist es ja da.
        Zuletzt geändert von AmicaNoctis; 03.03.2010, 18:54.
        [COLOR="DarkSlateGray"]Hast du die [COLOR="DarkSlateGray"]Grundlagen zur Fehlersuche[/color] gelesen? Hast du Code-Tags benutzt?
        Hast du als URL oder Domain-Beispiele example.com, example.net oder example.org benutzt?
        Super, danke!
        [/COLOR]

        Kommentar


        • #5
          Okay krass, hast Recht - hatte ich wohl was falsch gemacht gehabt, glaube weil ich in dem einen Table noch ISO hatte.
          Wie schauts mit Backslashes von mysql_real_escape_string() aus, die ja mit reinkommen?

          Danke.

          Kommentar


          • #6
            Zitat von KillUrMind Beitrag anzeigen
            Wie schauts mit Backslashes von mysql_real_escape_string() aus, die ja mit reinkommen?
            Wie es damit ausschaut? Gut, denke ich.

            Ernsthaft: Ich versteh die Frage nicht. Was soll damit sein?

            Edit: Jetzt hab ich kapiert, was du meinst. Die werden ja nicht in die DB geschrieben, sondern sind nur da, um Sonderzeichen im String zu escapen. Das ist wie bei PHP: Du schreibst zwar " foo=\"bar\"", aber ja nur, weil " die Sonderbedeutung "Hier ist Schluss mit String" hat und daher aufgehoben werden muss. Wenn du den Inhalt dann rausholst, ist ja auch kein Backslash mehr drin, oder?

            Wie lange machst du das jetzt?
            Zuletzt geändert von AmicaNoctis; 03.03.2010, 19:50.
            [COLOR="DarkSlateGray"]Hast du die [COLOR="DarkSlateGray"]Grundlagen zur Fehlersuche[/color] gelesen? Hast du Code-Tags benutzt?
            Hast du als URL oder Domain-Beispiele example.com, example.net oder example.org benutzt?
            Super, danke!
            [/COLOR]

            Kommentar


            • #7
              Wie schauts mit Backslashes von mysql_real_escape_string() aus, die ja mit reinkommen?
              Bullshit. die kommen NICHT mit rein!
              Auch hier: Versuch macht kluch.

              Kommentar


              • #8
                Zitat von AmicaNoctis Beitrag anzeigen
                Wie es damit ausschaut? Gut, denke ich.

                Ernsthaft: Ich versteh die Frage nicht. Was soll damit sein?

                Edit: Jetzt hab ich kapiert, was du meinst. Die werden ja nicht in die DB geschrieben, sondern sind nur da, um Sonderzeichen im String zu escapen. Das ist wie bei PHP: Du schreibst zwar " foo=\"bar\"", aber ja nur, weil " die Sonderbedeutung "Hier ist Schluss mit String" hat und daher aufgehoben werden muss. Wenn du den Inhalt dann rausholst, ist ja auch kein Backslash mehr drin, oder?

                Wie lange machst du das jetzt?
                Okay, ich dachte die werden mitgespeichert.

                Kommentar


                • #9
                  Zitat von KillUrMind Beitrag anzeigen
                  Okay, ich dachte die werden mitgespeichert.
                  Dann würden sie ja auch wieder rauskommen, das wäre totaler Unfug und ergibt keinen Sinn.
                  [COLOR="DarkSlateGray"]Hast du die [COLOR="DarkSlateGray"]Grundlagen zur Fehlersuche[/color] gelesen? Hast du Code-Tags benutzt?
                  Hast du als URL oder Domain-Beispiele example.com, example.net oder example.org benutzt?
                  Super, danke!
                  [/COLOR]

                  Kommentar

                  Lädt...
                  X