Sven Rautenberg: größe eines string in byte

Beitrag lesen

Moin!

hi, ist dann ein text feld in mysql überhaupt sinnvoll besuchertexte?
aber varchar geht auch nur bis 200irgendwas

VARCHAR geht in älteren Versionen bis 255 Bytes (woraus folgt, dass UTF-8 beispielsweise in ungünstigen Fällen nur 1/4 dieser Bytezahl an Zeichen speichern kann - wenn jedes UTF-8-Zeichen nämlich 4 Byte benötigt).

In neueren Versionen (ab MySQL 4.1) ist UTF-8 bekannt und wird berücksichtigt, die Längenangabe ist also eine echte Zeichenanzahl - das Feld benötigt dann ggf. einfach mehr Bytes, was aber nicht stört, da die benötigte Speichermenge sowieso dynamisch ist und sich an den Daten orientiert.

Wenn du dagegen etwaige Performancevorteile durch konstante Feldlängen nutzen willst (MySQL kann dann genau berechnen, wo ein einzelner Datensatz liegt, und muß auch keinen Platz schaffen, um diesen Datensatz mit evtl. längeren Daten zu überschreiben), müssen alle Felder einer Tabelle konstante Längen haben. Du mußt also für alle Felder CHAR statt VARCHAR verwenden, und auch TEXT bzw. BLOB sind dann verboten. Der Nachteil ist, dass MySQL für ein CHAR-Feld die dreifache Menge der Länge an Bytes fest reserviert, wenn du Unicode (z.B. UTF-8) benutzt. Die dadurch entstehende Leere bläht die Datenbank wiederum ziemlich auf, so dass die Performance durch größere Lesevorgänge dann wieder aufgefressen wird.

Auch Textfelder wie TEXT sind nur in ihrer maximalen Länge begrenzt, verbrauchen jedoch immer nur so viel Speicherplatz, wie aktuell im jeweiligen Datensatz drinsteht (plus ein paar Byte zusätzlich als Längenangabe).

- Sven Rautenberg

--
"Love your nation - respect the others."