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.
CREATE TABLE kunden (
user_id SERIAL PRIMARY KEY, /* 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 timestamp, /* Datums- und Zeitwert */
height numeric(19,2), /* Festkommawert mit 19 Stellen, davon 2 Nachkommastellen */
income numeric(19,4), /* Festkommawert 4 Nachkommastellen, 8 Byte */
isActive boolean, /* Boolean-Wert (true/false) */
atomweight double precision, /* 64 bit Gleitkommawert */
temperature Real /* 32 bit Gleitkommawert */
);
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.).
Links und weitere Informationen
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).
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 .
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.↩
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.↩