PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : INT(5) Begrenzung


Bit2_Gosu
12.04.2007, 11:41:52
Hallo !

Ich bin gerade etwas verwirrt, weil bisher dachte ich immer mit dem Datentyp "int(5)" stelle ich sicher, dass ein eingetragener Integer Wert im Dezimalsystem nicht länger als 5 Stellen sein kann.

Nun hab ich festgestellt, dass ich da sogar zB. 99999999 eintragen kann...
Dann hab ich mir gedacht, ok dann werden damit die ersten 5 Stellen des Integer bereichs reserviert, also bis zu 21474 bei signed. Das stimmt aber nat. auch net...

Was wird denn dann durch die 5 begenzt ??? Die Anzahl an reservierten bytes oder wie ?

MatMel
12.04.2007, 12:04:47
Erstell doch mal ein "int(1) unsigned" und schau ob 2^8 also ein Byte reinpasst. Dann weißte ob's die Anzahl der Bytes sind.

Habs grad probiert. Ein "int(1) unsigned" ist 32Bit groß ...

Bit2_Gosu
12.04.2007, 12:12:52
Gute idee, aber... ICH GLAUB DES NICHT !

Ich hab jetzt int(1) und kann 999999999 inserten... erfolgreich !

Also jetzt bin ich völlig ratlos...

MatMel
12.04.2007, 12:20:12
Eine andere Erweiterung wird von MySQL zur optionalen Spezifizierung der Anzeigebreite eines Integer-Werts unterstützt. Die Angabe erfolgt auf das Schlüsselwort für den Datentyp folgend in Klammern (z. B. INT(4)). Diese optionale Angabe der Anzeigebreite wird verwendet, um die Anzeige von Werten, die eine geringere als die für die Spalte festgelegte Breite aufweisen, nach links mit Leerzeichen aufzufüllen.

Die Anzeigebreite schränkt weder die in einer Spalte speicherbaren Wertebereiche noch die Anzahl der Stellen ein, die für Werte angezeigt werden, deren Breite die festgelegte Spaltenbreite überschreitet.

Wenn hierzu das optionale Erweiterungsattribut ZEROFILL verwendet wird, erfolgt ein Auffüllen nicht mehr mit Leerzeichen, sondern mit Nullen. Bei einer Spalte etwa, die als INT(5) ZEROFILL deklariert ist, wird der Wert 4 als 00004 abgerufen. Beachten Sie, dass, wenn Sie Werte in einer Integer-Spalte speichern, die größer sind als die Anzeigebreite, unter Umständen Probleme auftauchen, wenn MySQL Temporärtabellen für einige komplizierte Joins anlegt, denn in diesen Fällen setzt MySQL voraus, dass die Daten in die ursprüngliche Spaltenbreite passen.

Die Spaces hab ich zwar noch nie gesehen, aber bei Zerofill klappts...

Bit2_Gosu
12.04.2007, 12:34:56
Danke erst mal !

Also wenn ich int(99) hab und den wert 1 einfüge, dann wird da aber nix mit Leerzeichen aufgefüllt... bei int(99) zerofill wird allerdings durchaus mit Nullen aufgefüllt..

Naja also sowas braucht ja eigentlich eh keiner...

gibt es denn außer verschiedenen Datentypen noch eine möglichkeit den Wertebereich von etwa Integertypen zu begrenzen ??

xabbuh
12.04.2007, 13:47:37
gibt es denn außer verschiedenen Datentypen noch eine möglichkeit den Wertebereich von etwa Integertypen zu begrenzen ??
Mit dem Zusatz UNSIGNED kannst du den Wertebereich beeinflussen.

Bit2_Gosu
12.04.2007, 14:11:42
Des hab ich schon kapiert ;) ich meinte sowas eine fließende Begrenzung,

also etwa int<X> dadurch kann der Integer Wert max. X Stellen in der Tabelle annehmen.

Aber da gibts nix oder ? (int(X) bringt in der Hinsicht ja nix, haben wir festgestellt)

xabbuh
12.04.2007, 22:51:07
Nein, sowas gibt es in der Tat nicht. Eine entsprechende Überprüfung müsstest du softwareseitig vornehmen.