Datentypen in der Data Definition Language (SQL-DDL)

https://bildung.social/@oerinformatik/

https://oer-informatik.de/sql-ddl-datentypen

tl/dr; Alle Datenbankmanagemensysteme verfügen über ein ähnliches Set an Datentypen. Aber leider heißen sie oft anders und haben einen geringfügig anderen Funktionsumfang. Ich habe hier versucht für die wichtigsten DBMS Namen der Standardtypen zusammenzustellen, für Detailunterschiede muss ich aber an die jeweiligen Dokumentationen der DBMS verweisen. (Zuletzt geändert am 08.04.2025)

DBMS-spezifische Datentypen

Am einfachsten werden Datentypen deutlich, wenn dargestellt wird, was man damit speichern kann. Ausgangsbeispiel soll eine Tabelle kunden sein, in der allerlei Infos zu Kund*innen gespeichert werden; manches davon -zugegeben- etwas an den Haaren herbeigezogen:

Ein paar Unterschiede fallen schnell auf, wenn man durch die Tabs oben klickt: auch wenn SQL-Interpreter in der Regel case-insensitive sind, nutzen einige DBMS Kleinbuchstaben (MS-SQL, postgres), während andere die Datentypen großschreiben (MariaDB, MySQL).

Die Dokumentationen für Datentypen der einzelnen DBMS findet sich hier:

Datentyp MSSQL MySQL / MariaDB postgreSQL OracleDB SQLite
offizielle Dokumentation des DBMS zu Datentypen Microsoft SQL Server Datentypen MySQL - Data Types /
/
MariaDB - Data Types
postgresql Doku Oracle8 Application Developer’s Guide SQLite Datatypes

Zahlentypen

Für unterschiedliche Anwendungsfälle werden die Daten mit unterschiedlicher Präzision und Größenordnung abgespeichert. Die verbreitetsten Gruppen sind:

Ganzzahlen

Ganzzahlen können präzise auf Gleichheit geprüft werden und bilden unterschiedliche Zahlenräume ab: je nachdem, ob sie vorzeichenbehaftet (signed) oder ohne Vorzeichen (unsigned) sind und ob ihre Datenbreite 32 Bit oder 64 Bit sind, sind Zahlen im Rahmen von:

signed unsigned
8 Bit
1 Byte
0 .. (2^{8}-1)
0..255
-(2^{8-1}) .. (2^{8-1}-1)
-128..127
16 Bit
2 Byte
0 .. (2^{16}-1)
0..65535
-(2^{16-1}) .. (2^{16-1}-1)
-32.768..32.767
32 Bit
4 Byte
0 .. (2^{32}-1)
0..4.294.967.295
-(2^{32-1}) .. (2^{32-1}-1)
-2.147.483.648..2.147.483.647
64 Bit
8 Byte
0 .. (2^{64}-1)
0..18.446.744.073.709.551.615
(-2^{64-1}) .. (2^{64-1}-1)
n Bit 0 .. (2^{n}-1) (-2^{n-1}) .. (2^{n-1}-1)

Im ANSI-SQL-Standard sind Ganzzahlen mit 2 Byte (SMALLINT) und 4 Byte (INTEGER) definiert - viele DBMS setzen diese auch um. Leider heißen die Datentypen in vielen DBMS unterschiedlich. Oft gibt es jedoch interne Aliasse, die Standardbezeichnungen wie “INTEGER” dann in den korrekten Datentyp umsetzen.

Datentyp MSSQL MySQL / MariaDB postgreSQL OracleDB SQLite
Wahrheitswerte bit TINYINT(1) /
BOOLEAN
boolean NUMBER Numeric
Ganzzahl 32Bit int INT integer NUMBER(38) 1
Ganzzahl 64Bit bigint BIGINT bigint NUMBER(38) 2 Integer 3

Es gibt aber noch eine Reihe weiterer Datentypen - hier lohnt ein Blick in die jeweilige Dokumentation.

Festkommazahlen

Festkommazahlen teilen mit Ganzzahlen die Eigenschaft, dass sie präzise verglichen werden können. Im Rahmen der Präsision kann die Gleichheit zweier Festkommazahlen nachgewiesen werden. Festkommazahlen werden v.a. im Rahmen der Berechnungen mit Währungen genutzt, einige DBMS bieten daher gesonderte Datentypen an, die auch Währungsinformationen enthalten. Die verbreiteten Datentypen in diesem Kontext sind:

Datentyp MSSQL MySQL / MariaDB postgreSQL OracleDB SQLite
Festkommazahlen
und Datentypen
für €-Währungen
decimal(19,2)
money, smallmoney
DECIMAL(precision, scale) / NUMERIC(precision, scale) money NUMBER Numeric
Gleitkommazahlen

Gleitkommazahlen haben den Vorzug, dass sie unabhängig von der Größenordnung immer die gleiche Anzahl an Nachkommastellen Präzision bieten. Zudem decken Sie einen sehr großen Größenordnungsbereich ab. Allerdings kann man sie nicht ohne weitere Vorkehrungen auf Gleichheit überprüfen.

Analog zu den meisten Programmiersprachen bilden DBMS in der Regel 32-Bit (Float) und 64-Bit (Double) Gleitkommazahlen ab. Dabei nutzen Sie die Definitionen für Gleitkommazahlen, die in der Norm IEEE-754 festgeschrieben sind4:

MIN
kleinster Betrag ungleich 0
MAX
größter und kleinster
(mit neg. Vorzeichen) Betrag
32 Bit 1.175494 \cdot 10^{-38} 3.402823 \cdot 10^{38}
64 Bit 4.94066 \cdot 10^{−324} 1.79769 \cdot 10^{308}

Auch hier ist es so, dass jedes DBMS die Bezeichnung der Standard-Datentypen angepasst hat:

Datentyp MSSQL MySQL / MariaDB postgreSQL OracleDB SQLite
Gleitkommazahl 32Bit real / float(24) FLOAT Real REAL Real
Gleitkommazahl 64Bit float / float(53) 5 DOUBLE double precision FLOAT Real

Zeichenketten

Es gibt drei wesentliche Gruppen von Zeichenketten-Datentypen:

  • performanceoptimierte (CHAR): hier wird für jeden Datensatz eine feste Breite Speicher reserviert - dadurch ist leicht berechenbar, an welcher Stelle sich die gesuchte Information befindet: gute Performance auf Kosten des Speicherbedarfs.

  • speicheroptimiert (VARCHAR): Jede Zeichenkette belegt nur soviel Platz, wie sie gerade braucht. Das ist sehr speichersparend, hat aber zur Folge, dass jedes Mal berechnet werden muss, wo sich die Information befindet. Das kostet Performance, schont aber den Speicherbedarf.

  • nicht durchsuchbar: einige DBMS bieten Texttypen für sehr lange Texte, die jedoch nicht mehr durchsuchbar und indizierbar sind. Häufig werden diese Datentypen für Text der länger als 256 Zeichen ist verwendet.

Datentyp MSSQL MySQL / MariaDB postgreSQL OracleDB SQLite
Zeichenketten performanceoptimiert
Schneller Zugriff durch definierte Speicherbereiche
char / nchar CHAR / BINARY character CHAR(size)
max. 2000byte
Text
Zeichenketten speicheroptimiert
Weniger Speicherplatz, dafür muss Position berechnet werden
varchar / nvarchar VARCHAR / VARBINARY character varying VARCHAR2(size)
max. 4000byte
Text
sehr SEHR lange Texte text / ntext LONGTEXT text LONG

Datums- und Zeitwerte

Datentyp MSSQL MySQL / MariaDB postgreSQL OracleDB SQLite
Datum date DATE date DATE Numeric
Zeit time TIME time DATE Numeric
Datum + Zeit datetime DATETIME / TIMESTAMP timestamp TIMESTAMP Numeric

Dateien, Binärdaten, XML, JSON

Datentyp MSSQL MySQL / MariaDB postgreSQL OracleDB SQLite
Dateien (Binärdaten) image / BLOB BLOB bytea BLOB BLOB
JSON (nVarChar) JSON json VARCHAR2, CLOB, und BLOB Text

Allgemeine Infos zum Tabellenerstellen

Um Tabellen passgenau erstellen zu können, benötigen wir Wissen über die verfügbaren Grundlagen zum Tabellen- und Datenbankerstellen, die Datentypen sowie die Constraints (wie Schlüsselattribute, Eingabepflicht usw.).


Hinweis zur Nachnutzung als Open Educational Resource (OER)

Dieser Artikel und seine Texte, Bilder, Grafiken, Code und sonstiger Inhalt sind - sofern nicht anders angegeben - lizenziert unter CC BY 4.0. Nennung gemäß TULLU-Regel bitte wie folgt: Datentypen in der Data Definition Language (SQL-DDL)” von Hannes Stein, Lizenz: CC BY 4.0. Der Artikel wurde unter https://oer-informatik.de/sql-ddl-datentypen veröffentlicht, die Quelltexte sind in weiterverarbeitbarer Form verfügbar im Repository unter https://gitlab.com/oer-informatik/db-sql/ddl-basics. Stand: 08.04.2025.

[Kommentare zum Artikel lesen, schreiben] / [Artikel teilen] / [gitlab-Issue zum Artikel schreiben]


  1. Die Datenbreite in Byte wird in Klammern angegeben, per default sind es 8Byte (64Bit).

  2. Die Datenbreite in Byte wird in Klammern angegeben, per default sind es 8Byte (64Bit).

  3. SQLite: Die Speicherbreite von Integer-Werten wird dynamisch an Hand der Größe der Werte vergeben.

  4. Hintergrund zu Gleitkommazahlen findet sich z.B. in diesem Wikipedia-Artikel

  5. MS-SQL: für die Gleitkommazahlen ist float() der Standarddatentyp, wobei die Länge der Mantisse in Klammer übergeben wird. float(24) entspricht 32Bit Gleitkommazahlen nach ISO-Standard IEEE 754 und wird auch mit real abgekürzt. float() ist per default float(53), was dem 64-Bit ISO-Wert entspricht.

Kommentare gerne per Mastodon, Verbesserungsvorschläge per gitlab issue (siehe oben). Beitrag teilen: