2010-05-15 2 views
7

Ich sehe eine Menge Leute, die in ihren MySQL-Schemas wie zB INT (11) und sogar BIGINT (20), wie WordPress verwendet, willkürlich große Größen zu primären/fremden Schlüsselfeldern zuordnen.MySQL primäre/fremde Schlüsselgröße?

Korrigieren Sie mich jetzt, wenn ich falsch liege, aber sogar ein INT (4) würde (nicht signierte) Werte bis über 4 Milliarden unterstützen. Ändern Sie es in INT (5) und erlauben Sie Werte von bis zu einer Billiarde, was mehr ist, als Sie jemals brauchen würden, es sei denn, Sie speichern möglicherweise Geodaten bei der NASA/Google, von denen die meisten sicher nicht überzeugt sind.

Gibt es einen Grund, warum Menschen so große Größen für ihre Primärschlüssel verwenden? Scheint wie eine Verschwendung für mich ...

+1

Nein, das Größenfeld ist in Zeichen, nicht in binären Bytes. So kann int (4) nur bis zu 9999 (theoretisch; die Datenbank speichert sie intern als größer) halten. INT (11) ist eigentlich nur eine 32-Bit-Nummer. – MarkR

Antwort

10

Die Größe ist weder Bits noch Bytes. Es wird nur die Anzeigebreite verwendet, wenn das Feld ZEROFILL angegeben ist.

und

INT [(M)] [UNSIGNED] [ZEROFILL] A normal großen Integer. Der unterzeichnete Bereich ist -2147483648 bis 2147483647. Der unsigned Bereich von 0 bis 4294967295 ist this explanation

See.

0

Ich sehe keinen guten Grund, eine Nummer größer als 32-Bit-Ganzzahl für die Indizierung von Daten in normalen Datenbanken geschäftlicher Größe zu verwenden. Die meisten von ihnen haben vielleicht Millionen von Aufzeichnungen (oder diese Größenordnung).

+0

Auch nicht MySQL. Sie verwenden 32-Bit-Ganzzahlen für den Datentyp INT. Die Zahl in() hat keinen Einfluss auf die Anzahl der Bits. –