Größenangabebei Spalten

Hallo NG!

Ich habe eine Frage, die ich mir stellen musste, als ich gerade eine
Tabelle
angelegt habe, und zwar:

Wenn ich eine Tabelle anlege, muss ich für jede Spalte eine feste Größe
(also die maximale anzahl der Bytes / Zeichen, die in diese Spalte ein-
getragen werden können), wie in diesem Beispiel:

create table xy (username char(11), userstatus tinyint(2), key(username));

Hier habe ich eine Zeichenkette (username) und eine Zahl (userstatus). Wenn
ich also eine Spalte für Zeichenketten anlege, muss ich dort die Null-
Terminierung mitrechnen? (Wenn also ein Datensatz in dieser Spalte maximal
9 Zeichen enthaelt, muss ich dann trotzdem 10 "reservieren"?)?

Und wenn ich eine Spalte für Zahlen anlege (userstatus), wie sieht es dort
mit der Maximalgröße aus? Wenn diese Zahl (auf "normalem" Wege) binär
gespeichert wird, würde das ja heissen, dass ich dort Zahlen von 0 bis
65535
ablegen kann, wenn es ein BCD-Format ist, ist die Obergrenze aber 99.

Also, kann mir jemand diese Fragen beantworten?
Daniel Kruge [ Sa, 18 August 2007 09:38 ] [ ID #1798502 ]

Re: Größenangabe bei Spalten

Daniel Kruge schrieb:

> Wenn ich eine Tabelle anlege, muss ich für jede Spalte eine feste Größe
> (also die maximale anzahl der Bytes / Zeichen, die in diese Spalte ein-
> getragen werden können), wie in diesem Beispiel:

Erstens: Du _kannst_ eine Größe angeben, musst aber nicht.

Zweitens: Die angegebene Größe hat meistens nur indirekt oder auch gar
nichts mit der Anzahl der Bytes zu tun. Bei numerischen Typen z.B. hängt
die Anzahl der Bytes vom Typ ab, und bei Stringtypen bezeichnet die
Größe die Anzahl der Zeichen, wobei ein Zeichen - je nach Codierung -
durchaus mehrere und verschiedene Zeichen sogar verschieden viele Bytes
belegen kann (UTF-8 z.B.).

Die Größen, die Du angibst, und deren Bedeutung hängen vom Datentyp ab.

> Hier habe ich eine Zeichenkette (username) und eine Zahl (userstatus). Wenn
> ich also eine Spalte für Zeichenketten anlege, muss ich dort die Null-
> Terminierung mitrechnen? (Wenn also ein Datensatz in dieser Spalte maximal
> 9 Zeichen enthaelt, muss ich dann trotzdem 10 "reservieren"?)?

Welche "Null-Terminierung"? So etwas gibt es in MySQL nicht.

> Also, kann mir jemand diese Fragen beantworten?

Ja: Das Handbuch.

http://dev.mysql.com/doc/refman/5.1/de/storage-requirements. html

Gruß. Claus
Claus Reibenstein [ Sa, 18 August 2007 11:59 ] [ ID #1798503 ]

Re: Größenangabe bei Spalten

Daniel Kruge schrieb:
> Hallo NG!
>
> Ich habe eine Frage, die ich mir stellen musste, als ich gerade eine
> Tabelle
> angelegt habe, und zwar:
>
> Wenn ich eine Tabelle anlege, muss ich für jede Spalte eine feste Größe
> (also die maximale anzahl der Bytes / Zeichen, die in diese Spalte ein-
> getragen werden können), wie in diesem Beispiel:
>
> create table xy (username char(11), userstatus tinyint(2), key(username));
>

das *musst* Du m.E. nur bei CHAR und VARCHAR tun. Integer sollte
Default-Größen haben.

> Hier habe ich eine Zeichenkette (username) und eine Zahl (userstatus). Wenn
> ich also eine Spalte für Zeichenketten anlege, muss ich dort die Null-
> Terminierung mitrechnen? (Wenn also ein Datensatz in dieser Spalte maximal
> 9 Zeichen enthaelt, muss ich dann trotzdem 10 "reservieren"?)?

Was hat "Nullterminierung" mit MySQL zu tun? Wer sagt Dir, dass MySQL
sowas benutzt - und nicht vielleicht wie Pascal im ersten Byte die
Stringlänge speichert?

>
> Und wenn ich eine Spalte für Zahlen anlege (userstatus), wie sieht es dort
> mit der Maximalgröße aus? Wenn diese Zahl (auf "normalem" Wege) binär
> gespeichert wird, würde das ja heissen, dass ich dort Zahlen von 0 bis
> 65535

Das wäre vielleicht so, wenn Du unsigned benutzen würdest.

> ablegen kann, wenn es ein BCD-Format ist, ist die Obergrenze aber 99.
>
> Also, kann mir jemand diese Fragen beantworten?

Wie wäre es denn mit dem MySQL-Handbuch? Das findest Du unter
dev.mysql.com/doc, und es enthält sicherlich genaue Informationen
darüber, welche Datentypen wieviele Byte speichern können und welche
Datenbereiche sie abdecken.
Christian Kirsch [ Sa, 18 August 2007 14:17 ] [ ID #1798504 ]

Re: Größenangabebei Spalten

On Sat, 18 Aug 2007 14:17:56 +0200, Christian Kirsch wrote:

> Daniel Kruge schrieb:
>> create table xy (username char(11), userstatus tinyint(2),
>> key(username));
>>
[...]
>> Und wenn ich eine Spalte für Zahlen anlege (userstatus), wie sieht es
>> dort mit der Maximalgröße aus? Wenn diese Zahl (auf "normalem" Wege)
>> binär gespeichert wird, würde das ja heissen, dass ich dort Zahlen von
>> 0 bis 65535
>
> Das wäre vielleicht so, wenn Du unsigned benutzen würdest.

Nitpick: Nein, selbst dann würde er mit seinem tinyint nur auf 0-255
kommen ;-) SCNR

Den Wertebereich 0-65535 hatte er ja fälschlicherweise aus der Angabe für
die Mindestlänge der Textrepräsentation (die ja rein gar nichts mit dem
erlaubten Wertebereich zu tun hat) abgeleitet.

Björn
B.Steinbrink [ Sa, 18 August 2007 14:36 ] [ ID #1798505 ]

Re: Größenangabe bei Spalten

Christian Kirsch schrieb:

> Daniel Kruge schrieb:
>
>> Wenn ich eine Tabelle anlege, muss ich für jede Spalte eine feste Größe

.... "angeben" fehlt da noch (fällt mir jetzt erst auf).

> das *musst* Du m.E. nur bei CHAR und VARCHAR tun.

Auch da muss man nicht, wenn man mit dem Default von 1 zufrieden ist.

Gruß. Claus
Claus Reibenstein [ Sa, 18 August 2007 14:45 ] [ ID #1798506 ]
Datenbanken » de.comp.datenbanken.mysql » Größenangabebei Spalten

Vorheriges Thema: mysql und Excel Importieren von Excel in Mysql
Nächstes Thema: Nested Set mit LEFT JOIN