Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

Maximaler auto_increment-Wert für int(10)?

49 views
Skip to first unread message

Gerome Muent

unread,
Aug 20, 2015, 3:23:51 AM8/20/15
to
Hallo zusammen,
ich habe diverse Tabellen mit
ID int(10) UNSIGNED AUTO_INCREMENT


In einigen Tabellen ist die ID inzwischen bei ca.
1500000.

Ich finde im Netz sehr widersprüchliche Angaben, wenn ich nach dem
Maximalwert frage.
Wofür steht die (10)? 10 Stellen? 10 Bytes?
Was ist der max. Wert? Ca. 4,3 Mio... dann komme läuft mir die Tabelle
bald über :-(
Was wäre dann zu tun? Spalte auf bigint umstellen? Wie sieht das dann
mit der Performance aus?

Danke und Grüsse, Gérôme

Christian Schweingruber

unread,
Aug 20, 2015, 5:02:15 AM8/20/15
to
Hallo Gérôme

Am 20.08.2015 um 09:23 schrieb Gerome Muent:
> Hallo zusammen,
> ich habe diverse Tabellen mit
> ID int(10) UNSIGNED AUTO_INCREMENT
ein Int ist ein 32-bit Wert.
Da er unsigned ist ist das Maximum 2^32-1=4294967295 (Zehn Stellen, 4.3 Milliarden)
Warscheinlich hast du also noch etwas Reserve...

vg Chrigu

Gerome Muent

unread,
Aug 20, 2015, 5:33:39 AM8/20/15
to
Am 20.08.2015 um 11:02 schrieb Christian Schweingruber:

> ein Int ist ein 32-bit Wert.
> Da er unsigned ist ist das Maximum 2^32-1=4294967295 (Zehn Stellen,
4.3 Milliarden)
> Warscheinlich hast du also noch etwas Reserve...

Das ist ja beruhigend Dann habe ich noch nicht mal 1/1000 ausgeschöpft
nach 5 Jahren DB-Gebrauch.

Die Frage ist dann nur noch, was die "(10)" in Klammern bedeutet, wenn
int immer 4 Bytes = 32 Bit sind.

Grüsse, Gérôme

PS: Sorry für die private Mail... hab auf das falsche "Antworten" geklickt.
--
BM ComputerServices Daumstr. 180
Programmierung 13599 Berlin
Webdesign Tel.: 0175/7419517
Datenbanken Web: http://www.bmservices.de
Apache/PHP/MySQL eMail: kon...@bmservices.de

Olaf Schmitt

unread,
Aug 20, 2015, 3:39:22 PM8/20/15
to
Am 20.08.2015 um 09:23 schrieb Gerome Muent:
> Hallo zusammen,
> ich habe diverse Tabellen mit
> ID int(10) UNSIGNED AUTO_INCREMENT
Die 10 ist die Anzahl der anzuzeigenden Stellen.
Im Prinzip für dich irrelevant.

Steht da drin
int(3) mit dem Wert 2, dann gibt das 002
int(5) mit dem Wert 12, dann gibt das 00012

Stichwort ZEROFILL

Anders sieht das bei decimal aus.
Aber das ist eine andere Baustelle.



Olaf



Gerome Muent

unread,
Aug 21, 2015, 6:47:56 AM8/21/15
to
Am 20.08.2015 um 21:39 schrieb Olaf Schmitt:

> Steht da drin
> int(3) mit dem Wert 2, dann gibt das 002
> int(5) mit dem Wert 12, dann gibt das 00012
>
> Stichwort ZEROFILL

Danke.
So war mir das nicht klar. Jetzt verstehe ich "int(10)".

Grüsse, Gérôme

Thomas 'PointedEars' Lahn

unread,
Aug 21, 2015, 7:34:22 PM8/21/15
to
Gerome Muent wrote:

> ich habe diverse Tabellen mit
> ID int(10) UNSIGNED AUTO_INCREMENT
>
>
> In einigen Tabellen ist die ID inzwischen bei ca.
> 1500000.
>
> Ich finde im Netz sehr widersprüchliche Angaben, wenn ich nach dem
> Maximalwert frage.

So? Wo denn und wie sieht die Frage genau aus?

> Wofür steht die (10)? 10 Stellen?

Ja. Vor dem Komma.

> 10 Bytes?

Nein (wie Du Dir zur Abwechslung auch selbst hättest *denken* können).

> Was ist der max. Wert?

Der ergibt sich aus der Anzahl (Dezimal-)Stellen vor dem Komma und der
Tatsache, dass die Zahl intern binär gespeichert wird. Man kann es aber
auch einfach im MySQL-Handbuch nachlesen, völlig überraschenderweise[tm]
im Kapitel “Data Types”, Abschnitt “Numeric Types”.

> Ca. 4,3 Mio... dann komme läuft mir die Tabelle bald über :-(

Wie kommst Du auf „ca. 4,3 *Millionen*“?

> Was wäre dann zu tun? Spalte auf bigint umstellen?

RTFM.

> Wie sieht das dann mit der Performance aus?

Gut.

--
PointedEars

Twitter: @PointedEars2
Please do not cc me. / Bitte keine Kopien per E-Mail.

Thomas 'PointedEars' Lahn

unread,
Aug 22, 2015, 11:51:42 AM8/22/15
to
Gerome Muent wrote:

> Am 20.08.2015 um 21:39 schrieb Olaf Schmitt:
>> Steht da drin

Wo?

>> int(3) mit dem Wert 2, dann gibt das 002
>> int(5) mit dem Wert 12, dann gibt das 00012
>>
>> Stichwort ZEROFILL

Irrelevant. ZEROFILL ist *optional*.

> Danke.
> So war mir das nicht klar. Jetzt verstehe ich "int(10)".

… immer noch nicht. Denn ZEROFILL hat damit sehr wenig zu tun. Sondern:

2⁰ = 1
2¹ = 2
2² = 2 × 2 = 4
2³ = 4 × 2 = 8
2⁴ = 8 × 2 = 16

2³² − 1 = 4'294'967'295 (ca. 4.3 _Milliarden_)
`-----.,----'
10 Stellen

2³² − 1 ist deshalb der Maximalwert, weil mit 32 Bits zwar 2³²
unterschiedliche Werte gespeichert werden können, einer dieser
Werte aber 0 ist.

Mit

2³³ − 1 = 8'589'934'591

bliebe man auch noch innerhalb der 10 angezeigten Dezimalstellen vor dem
Komma, aber man benötigte dafür mehr als 32 Bits, also mehr als die für den
Datentyp INT zur Verfügung stehenden 4 (8-Bit-)Bytes (4 × 8 = 32).

Ohne UNSIGNED reduziert sich der Maximalwert nochmals auf eins weniger als
die Hälfte von (hier) 2³², weil das höchstwertige Bit (MSB; hier das 32.,
von rechts gezählt) als Vorzeichenbit dient: Ist es gesetzt (1), so ist,
einfach formuliert die mit den übrigen Bits angegebene Zahl negativ,
andernfalls (0) positiv.

Da ich keinen Sinn in negativen IDs sehe, rate ich dazu, dafür immer
UNSIGNED zu verwenden.

Olaf Schmitt

unread,
Aug 22, 2015, 3:32:12 PM8/22/15
to
Und du hast es nicht verstanden.
int hat immer die gleiche Größe, egal was da hinter steht.
Und es hat eine Menge mit Zerofill zu tun.
https://blogs.oracle.com/jsmyth/entry/what_does_the_11_mean



Olaf


0 new messages