Datentypen in der Data Definition Language (SQL-DDL)

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.

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 einem Kunde gespeichert wird; manches davon -zugegeben- etwas an den Haaren herbeigezogen.

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 Tutorial /
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
32 Bit 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 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)

Die verbreitetsten Typen in Datenbanken sind:

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

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.

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 10^{−324} 1.79769 \cdot 10^{308}
Datentyp MSSQL MySQL / MariaDB postgreSQL OracleDB SQLite
Gleitkommazahl 32Bit real / float(24) FLOAT Real REAL Real
Gleitkommazahl 64Bit float / float(53) 3 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 Text
Zeichenketten speicheroptimiert
Weniger Speicherplatz, dafür muss Position berechnet werden
varchar / nvarchar VARCHAR / VARBINARY character varying VARCHAR Text
sehr SEHR lange Texte text / ntext LONGTEXT text LONG Real

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.).

Quellen und offene Ressourcen (OER)

Die Ursprungstexte (als Markdown), Grafiken und zugrunde liegende Diagrammquelltexte finden sich (soweit möglich in weiterbearbeitbarer Form) in folgendem git-Repository:

https://gitlab.com/oer-informatik/db-sql/ddl-basics.

Sofern nicht explizit anderweitig angegeben sind sie zur Nutzung als Open Education Resource (OER) unter Namensnennung (H. Stein, oer-informatik.de) freigegeben gemäß der Creative Commons Namensnennung 4.0 International Lizenz (CC BY 4.0).

Creative Commons Lizenzvertrag


Note on reuse

This work and its contents are licensed under CC BY 4.0 unless otherwise noted. Attribution according to TASLL rule please as follows: “Data Definition Language (SQL-DDL)” by Hannes Stein, license: CC BY 4.0. The sources of this work are available on .


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

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

  3. 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: