Christian Kruse: MySQL: varchar vs. tinytext-felder: wozu gibt's noch varchar?

Beitrag lesen

Hallo Sven,

Jetzt habe ich gelesen, dass varchar die nichgenutzten Zeichen
auch speichern würde, d.h. in einem varchar(10)-feld, in dem
"abcdef" steht, wird trotzdem der speicherplatz für 10 Zeichen
gespeichert, also 5 Zeichen Speicherplatz werden "vernichtet".

Falsch gelesen. CHAR-Felder speichern feste Längen unabhängig von
der tatsächlichen Benutzung.

Falsch. MySQL macht aus varchar-Feldern char-Felder. Es wird immer
die maximale Laenge gespeichert. Das hat uebrigens auch ganz konkrete
Gruende und wird auch in anderen RDBMS (z. B. PostGreSQL) getan:
nimmt man fuer ein Feld eine variable und nicht feste Laenge, kann
die Position eines Datensatzes nicht mehr in einem Zug berechnet
werden, sondern braucht linear viele Zuege.  Bitte lies es im
Sourcecode nach, wenn du mir das nicht glauben solltest. Ich habe
das bereits getan.

MySQL optimiert aber in der Regel CHAR-Felder zu
VARCHAR-Feldern - die Doku verrät dir mehr dazu.

Tatsaechlich kennt MySQL keine char-Felder und verhaelt sich auch in
diesem Fall fehlerhaft. Der Standard sagt, dass Char-Felder
aufgefuellt werden muessen. MySQL tut dies nicht. Varchar-Felder
duerfen nicht aufgefuellt werden, deren Laenge ist (nach aussen hin)
variabel (lt. Standard). Wie das intern gehandhabt wird, wird
nirgendwo vorgeschrieben. MySQL kennt also keine Char-Felder, sondern
nur Varchar-Felder.

Grüße,
 CK

--
[remote-signature:http://www.defunced.de/cgi-bin/signature.pl]
http://wwwtech.de/