Premium

Numerischer Datentyp

Numerische Daten unterscheiden sich nach exakt und näherungsweise sowie nach ganzzahlig und reell. Eine eigene Kategorie bilden Bit-Werte.

Exakte ganze Zahlen

TypSpeicherWertebereich
TINYINT1 Bytevon -128 bis 127 (von -27 bis 27-1)
von 0 bis 255 (von 0 bis 28-1)
SMALLINT2 Bytevon -32768 bis 32767 (von -215 bis 215-1)
von 0 bis 65535 (von 0 bis 216-1)
MEDIUMINT3 Bytevon -223 bis 223-1
von 0 bis 224-1
INT
INTEGER
(Synonyme)
4 Bytevon -231 bis 231-1
von 0 bis 232-1
BIGINT8 Bytevon -263 bis 263-1
von 0 bis 264-1

Ganze Zahlen können mit dem Schlüsselwort UNSIGNED deklariert werden. Dann sind in der Spalte keine negativen Werte mehr möglich, und der erlaubte Wertebereich verdoppelt sich. So nimmt TINYINT Werte von -128 bis 127 an, TINYINT UNSIGNED dagegen von 0 bis 255.

Exakte reelle Zahlen

TypWertebereich
DEC[(M,D)]
DECIMAL[(M,D)]
(Synonyme)
Abhängig von den Parametern M und D

Der Typ DECIMAL speichert reelle Zahlen exakt. Er wird verwendet, wenn die Genauigkeit kritisch ist – zum Beispiel bei finanziellen Daten.

Beispiel:

MySQL 8.1
CREATE TABLE Users (
    ...
    salary DECIMAL(5,2)
);

In diesem Beispiel wird festgelegt, dass in der Spalte salary Zahlen mit maximal 5 Stellen gespeichert werden, davon 2 nach dem Komma. Die Spalte fasst also Werte im Bereich von -999.99 bis 999.99.

Die Syntax DECIMAL ist äquivalent zu DECIMAL(M) und DECIMAL(M,0). Standardmäßig ist M gleich 10.

Vor- und Nachkommateil werden als zwei separate ganze Zahlen abgelegt. Damit lässt sich der Speicherbedarf leicht berechnen: Bei DECIMAL(5,2) hat der Vorkommateil 3 Stellen und braucht 2 Byte, der Nachkommateil mit 2 Stellen kommt mit 1 Byte aus. Insgesamt werden also 3 Byte benötigt.

Bit-Werte

TypSpeicherWertebereich
BIT[(M)]M Bitvon 1 bis 64 Bit, abhängig vom Wert von M
BOOL
BOOLEAN
(Synonyme)
1 Bitentweder 0 oder 1

Der Datentyp BIT(M) speichert eine Bit-Folge fester Länge. Standardmäßig sind das 8 Bit. Verwendet der zugewiesene Wert weniger als M Bit, wird links mit Nullen aufgefüllt. Versuchst du zum Beispiel, den Wert b'101' in BIT(6) zu schreiben, wird tatsächlich b'000101' gespeichert.

Näherungswerte

TypSpeicherWertebereich
FLOAT[(M, D)]4 ByteMinimum ±1.17·10-39
Maximum ±3.4·1038
REAL[(M, D)]
DOUBLE[(M, D)]
(Synonyme)
8 ByteMinimum ±2.22·10-308
Maximum ±1.79·10308

Auch Gleitkomma-Datentypen können UNSIGNED sein. Wie bei den ganzzahligen Typen verhindert das Attribut, dass in der Spalte negative Werte gespeichert werden, anders als dort bleibt der maximale Wertebereich der Spalte aber unverändert.

Ganze Zahlen

TypSpeicherWertebereich
SMALLINT2 Bytevon -32768 bis 32767
INT
INTEGER
(Synonyme)
4 Bytevon -2147483648 bis 2147483647
BIGINT8 Bytevon -9223372036854775808 bis 9223372036854775807

Auto-Increment-Typen

TypSpeicherWertebereich
SMALLSERIAL2 Bytevon 1 bis 32767
SERIAL4 Bytevon 1 bis 2147483647
BIGSERIAL8 Bytevon 1 bis 9223372036854775807

Die SERIAL-Typen sind Pseudotypen zum Anlegen von Auto-Increment-Spalten. SERIAL entspricht INTEGER mit einer automatisch erzeugten Sequenz.

Exakte reelle Zahlen

TypGenauigkeitWertebereich
DECIMAL[(precision, scale)]
NUMERIC[(precision, scale)]
(Synonyme)
BenutzerdefiniertBis zu 131072 Stellen vor dem Komma und bis zu 16383 danach

Der Typ NUMERIC speichert reelle Werte exakt. Er wird verwendet, wenn die Genauigkeit kritisch ist – zum Beispiel bei finanziellen Daten.

Beispiel:

MySQL 8.1
CREATE TABLE Users (
    ...
    salary NUMERIC(10,2)
);

In diesem Beispiel wird festgelegt, dass in der Spalte salary Zahlen mit maximal 10 Stellen gespeichert werden, davon 2 nach dem Komma. Die Spalte fasst also Werte im Bereich von -99999999.99 bis 99999999.99.

Näherungswerte

TypSpeicherGenauigkeitWertebereich
REAL4 Byte6 Stellenvon 1E-37 bis 1E+37
DOUBLE PRECISION8 Byte15 Stellenvon 1E-307 bis 1E+308

Gleitkomma-Typen werden für näherungsweise Berechnungen verwendet. PostgreSQL unterstützt zusätzlich die Sonderwerte Infinity, -Infinity und NaN (keine Zahl).