MariaDB und MySQL
MariaDB und MySQL sind sich sehr ähnlich, wenn es um Datentypen geht. Es gibt jedoch einige kleine Unterschiede. Wenn es diese gibt, werde ich das erwähnen.
Numerische Typen
Numerische Typen haben manchmal eine "Größe". Diese Größe ist nicht direkt eine Validierung. Sie ist meistens die Größe der Zahl und legt fest, wie viel von dieser Größe zum Speichern der Dezimalzahl verwendet wird. Sized haben nie eine Größe, die die Eingabe validiert. Es geht immer um die Genauigkeit.
INTEGER
Java: Integer
, Long
Die Ganzzahlen in MariaDB sind in verschiedene Größen unterteilt. Je nachdem, welche Größe du wählst, benötigen sie unterschiedlich viel Speicherplatz. Wähle deinen Integer-Typ anhand der maximalen und minimalen Größe, die du für die Werte erwartest.
TINYINT
: Zwischen -128 und 127 - MariaDB | MySQLSMALLINT
: -32.768 und 32.767 - MariaDB | MySQLMEDIUMINT
: -8.288.608 und 8.388.607 - MariaDB | MySQLINT
oderINTEGER
: -2.147.483.648 und 2.147.483.647 - MariaDB | MySQLBIGINT
: Jeder Wert größer alsINT
- MariaDB | MySQL
DECIMAL
Java: Double
| MariaDB | MySQL
Eine Zahl mit einem "exakten" Fixpunkt.
DOUBLE
Java: Double
| MariaDB | MySQL
Gleitkommazahl mit doppelter Präzision
FLOAT
Gleitkommazahl mit einfacher Präzision
BOOLEAN
Java: Boolean
| MariaDB | MySQL
Boolesche Werte werden intern als TINYINT
gespeichert.
Texttypen
Es gibt verschiedene Texttypen, die wir je nach der erwarteten Größe des Wertes auswählen müssen.
CHAR
Java: String
| MariaDB | MySQL
CHAR wird für Strings mit der gleichen Größe verwendet. z.B. Länder-Codes. Er hat eine maximale Länge von 255. Die Länge muss bei der Erstellung festgelegt werden. Die verbleibenden Zeichen werden mit Leerzeichen aufgefüllt, um die angegebene Länge zu erreichen.
CHAR(Länge)
TEXT
Java: String
Der Texttyp ist in verschiedene Größen unterteilt. Sie lassen keine Werte zu, die größer als die maximale Größe sind.
TINYTEXT
: Bis zu 255 Zeichen - MariaDB | MySQLTEXT
: Bis zu 65.353 Zeichen - MariaDB | MySQLMEDIUMTEXT
: Bis zu 16.777.215 Zeichen - MariaDB | MySQLLONGTEXT
: Bis zu 4.294.967.295 Zeichen - MariaDB | MySQL
VARCHAR
Java: String
| MariaDB | MySQL
VARCHAR
ist ein String mit einer variablen Maximalgröße.
Die maximale Größe ist hier etwas komplexer, da sie von der Kodierung der Datenbank abhängt.
Im Gegensatz zu CHAR
wird hier kein Padding hinzugefügt.
Theoretisch beträgt die maximale Größe 65.532 Zeichen. Wenn du utf8 verwendest, das bis zu 4 Byte pro Zeichen benötigt, kommst du im schlimmsten Fall auf 21.844 Zeichen.
Ein Vorteil gegenüber TEXT ist, dass VARCHAR
-Spalten vollständig indiziert werden können, während TEXT-Spalten auf eine bestimmte Länge gekürzt werden.
Wenn du also deine Werte indizieren musst, solltest du VARCHAR nehmen.
Solltest du einfach nur große Mengen Text speichern wollen, ist ein TEXT
Typ die beste Wahl.
Enum
Java: String oder Enum name | MariaDB | MySQL
Der Enum-Typ ist ein spezieller String, der der Spalte eine Eingabevalidierung hinzufügt. Es können nur Werte hinzugefügt werden, die bei Erstellung der Spalte definiert sind.
ENUM('Wert1','Wert2',...)
JSON
Java: String | MariaDB | MySQL
MySQL JSON wird als LONGTEXT-Spalte gespeichert, aber für einen besseren Zugriff in ein internes Format umgewandelt.
MariaDB
JSON
ist ein Alias für LONGTEXT
und fügt eine Prüfung hinzu, die beim Einfügen eine gültige JSON
-Syntax sicherstellt. JSON
ist ein normaler String in MariaDB.
SET
Ähnlich wie ein Enum kann ein Set nur vordefinierte Eingaben enthalten, die durch ,
getrennt sind.
Bei einem Set wie diesem:
können mehrere Werte haben wie:
''
'a'
'a,b'
'a,c'
- ...
Binäre Typen
BLOB
Java: Alles
Der BLOB
-Typ ist in mehrere Größen unterteilt.
Er wird verwendet, um beliebige Binärdaten zu speichern.
TINYBLOB
: Bis zu 255 Bytes - MariaDB | MySQLBLOB
: Bis zu 65.353 Bytes - MariaDB | MySQLMEDIUMBLOB
: Bis zu 16.777.215 Bytes - MariaDB | MySQLLONGBLOB
: Bis zu 4.294.967.295 Bytes alias 4GB - MariaDB | MySQL
BINARY
Java: Beliebig | MariaDB | MySQL
Speichert einen binären Wert mit fester Länge.
BINARY(length)
Datum und Uhrzeit
DATE
Java: LocalDate
| MariaDB | MySQL
ZEIT
Java: LocalTime
| MariaDB | MySQL
DATETIME
Java: LocalDateTime
| MariaDB | MySQL
Kombination aus DATE und TIME. Sie werden in der aktuellen Zeitzone gespeichert. Sie überprüfen auch, ob die Uhrzeit in der aktuellen Zeitzone gültig ist. Einige Zeiten können aufgrund der Sommerzeit ungültig sein, die auch als Winter- und Sommerzeit bezeichnet wird.
TIMESTAMP
Java: LocalDateTime
| MariaDB | MySQL
Ein Zeitstempel wird beim Einfügen in UTC umgewandelt und beim gegenseitigen Lesen in die Zeitzone der Session geändert.
YEAR
Java: Integer
oder String
| MariaDB | MySQL
Ein Jahr steht für eine Jahreszahl im zwei- oder vierstelligen Format. Ihr Bereich ist begrenzt.
- Vier Ziffern (
YEAR(4)
): 1901 -> 2155 und 0000 - Zwei Ziffern (
JAHR(2)
): 70 -> 69 für 1970 -> 2069