# Verständnisfrage zu varchar und Speicherplatz



## brainray (2. Jan 2010)

Hallo,

wie besetzt varchar eigentlich Speicherplatz: wenn ich ein Attribut x varchar(25) definiere, belegt aber nur 15 Bytes, werden ja tatsächlich nur die 15 Bytes belegt, und die restlichen 10 Bytes werden ja _nicht _ reserveirt, richtig? Das heißt, wenn ich nun ein Update auf diesem Attribut in dieser Zeile durchführe, der nun 25 Bytes  aumfasst, würde die Datenbank-Engine vermutlich den original-Eintrag löschen und einen Platz im Block suchen, an den die 25 Bytes hinpassen. Entsprechend müssten danach noch der Baum bzw. die Indices reorganisiert werden.

Hätte man einen char(25) Datentyp verwendet, könnte vermutlich der selbe Speicherplatz benutzt werden.

Sehe ich das richtig?

Beste Dank


----------



## Meldanor (2. Jan 2010)

MySQL :: MySQL 5.1 Referenzhandbuch :: 11.4.1 Die CHAR- und VARCHAR-Typen
Eventuel hilft dir das


----------



## brainray (3. Jan 2010)

Hi,

danke für die Anregung. Leider steht es dort auch nicht ganz genau, aber ich krame bereits in einigen Büchern.

Viele Grüße

Ray


----------



## ice-breaker (3. Jan 2010)

die Angabe zu char(25) stimmt, zu varchar ist das komplexer, erstmal wird an Bytes natürlich der String (1 Byte pro Zeichen bei ASCII) + 1 bzw 2 Bytes als Längenangabe wielang der String ist (2 Bytes bei length > 256).

Wie nun genau die Daten bei varchar gespeichert werden ist eine komplexere Sache, da jede Engine dies implementieren kann, wie sie möchte. Mach dir da keine zu großen Gedanken drüber, es seidenn es beeinflusst wirklich die Performance. Denn bei InnoDB ist die Speicherung relativ komplex, und noch komplexer ist sie geworden, seitdem Kompressionen unterstützt werden.


----------

