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:
CREATE TABLE kunden (
user_id INT PRIMARY KEY AUTO_INCREMENT, /* Fortlaufende ID, Primärschlüssel*/
lastname CHAR(32) NOT NULL, /* Zeichenkette, eingabepflichtig, performanceoptimiert*/
firstname CHAR(32), /* Zeichenkette, performanceoptimiert*/
street VARCHAR(64), /* Zeichenkette, speicheroptimiert*/
birthday DATE, /* Datum */
lastchanged DATETIME, /* Datums- und Zeitwert */
height DECIMAL(19,2), /* Festkommawert mit 19 Stellen, davon 2 Nachkommastellen */
income DECIMAL(19,4), /* Festkommawert 4 Nachkommastellen, 8 Byte */
isActive TINYINT(1), /* Boolean-Wert (true/false) */
atomweight DOUBLE, /* 64 bit Gleitkommawert */
temperature FLOAT /* 32 bit Gleitkommawert */
);
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.).
Links und weitere Informationen
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]
Die Datenbreite in Byte wird in Klammern angegeben, per default sind es 8Byte (64Bit).↩
Die Datenbreite in Byte wird in Klammern angegeben, per default sind es 8Byte (64Bit).↩
SQLite: Die Speicherbreite von Integer-Werten wird dynamisch an Hand der Größe der Werte vergeben.↩
Hintergrund zu Gleitkommazahlen findet sich z.B. in diesem Wikipedia-Artikel↩
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.↩