Größenangabebei Spalten

Größenangabebei Spalten

am 18.08.2007 09:38:11 von Daniel Kruge

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?

Re: Größenangabe bei Spalten

am 18.08.2007 11:59:59 von Claus Reibenstein

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

Re: Größenangabe bei Spalten

am 18.08.2007 14:17:56 von Christian Kirsch

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.

Re: Größenangabebei Spalten

am 18.08.2007 14:36:22 von B.Steinbrink

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

Re: Größenangabe bei Spalten

am 18.08.2007 14:45:58 von Claus Reibenstein

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