| Die für eine MySQL-Datenbank verwendbaren Daten-Typen sind u.a. in der Original-Doku ausführlich beschrieben. | Allerdings ist die Doku etwas unübersichtlich. Diese Seite soll zur Ergänzung dienen. |
SQL @ MySQL
|
Die Datenbank-'Sprache' (Standard Query Language) |
| Bool-Typ | Zusammenfassung 1 SET = 8..64 BOOL-Variable |
| Ganze Zahlen | 10 Varianten für jeden Zahlen-Bereich. |
| Gleitkomma-Zahlen | 3 Varianten für fixen oder variablen Zahlen-Bereich. |
| Datum & Zeit | 5 spezialisierte Typen |
| Text (String) | Von einzelnen Zeichen bis zu 4 GB |
| WerteListe | Auswahl von 1 oder mehreren Elementen aus einer Liste |
| Binär-Daten | Bilder, Audio und andere "Blob"-Daten bis zu 4 GB |
Bool (Wahr / Falsch) |
|
|
MySQL bietet keine Bool-Typen, sondern an deren Stelle SET-Listen. Eine SET-Variable mit einer Werte-"Liste" aus einem einzigen Wert entspricht genau einer BOOL-Variable und benötigt 1 Byte Speicher pro Datensatz. Allerdings wird dabei nur 1 Bit benutzt. |
SET bietet die Möglichkeit, bei gleichem Speicher-Bedarf
auch die restlichen 7 Bit zu verwenden. 1 SET-Variable entspricht daher einer Zusammenfassung von 8 BOOL-Variablen. ♦ Details zur SET-Type ↓ auf dieser Seite. |
Ganze Zahlen |
|||||||||||||||||||||||||||||||||||||||||||||
|
Rechts die Liste der verfügbaren Daten-Typen. ► In der Praxis sind viele Datenbanken weit über-dimensioniert. Beispielsweise werden für Zahlen im Bereich 0..100 Variable vom Typ INTEGER verwendet. Der Einsatz von TINYINT würde den Speicher-Bedarf auf 1/4 reduzieren. ► Wenn nur positive Werte auftreten, kann man bei gegebener Speicher-Größe den Werte-Bereich mit dem Attribut UNSIGNED verdoppeln. Das trifft zumindest für Primär- und Fremdschlüssel fast immer zu. ► Einfügen illegaler Daten mit INSERT oder UPADTE: In diesem Fall werden die Daten auf die jeweilige Unter- bzw. Ober-Grenze gesetzt. ► Wenn die Type auf eine mit kleinerem Speicher geändert wird, dann werden die Werte vorhandener Daten auf die neuen Unter- und Obergrenzen geändert. |
|
||||||||||||||||||||||||||||||||||||||||||||
|
►
Andere Datenbanken verwenden evtl. andere Typen-Bezeichnungen. Es entspricht
INT1 → TINYINT, INT2 → SMALLINT, INT3 → MEDIUMINT,
INT → INTEGER, INT4 → INTEGER, INT8 → BIGINT.
|
♦ Details zum Thema
Zahlen in der Informatik. ♦ Details zu Funktionen ganzer Zahlen |
||||||||||||||||||||||||||||||||||||||||||||
Gleitkomma-Zahlen |
|||||||||||||||||
|
Rechts die Liste der verfügbaren Daten-Typen. ► Die Bezeichnung "Stellen" bezieht sich auf die Anzahl verlässlicher Dezimal-Ziffern. ► Die meisten Programme verwenden ohne besondere Vereinbarung DOUBLE. Geringere Genauigkeit (FLOAT) sollten sie nur dann verwenden, wenn bei großer Anzahl von Daten der Speicher-Bedarf zu groß wird. |
|
||||||||||||||||
|
Die Standard ANSI/ISO SQL-92 Typen NUMERIC
und DECIMAL werden verwendet, um Bereich und Genauigkeit
individuell festzulegen. In MySQL sind die beiden Typen äquivalent. Die Argumente M und D bezeichnen Anzahl der Stellen und Dezimal-Stellen. Das Attribut UNSIGNED setzt die Untergrenze auf 0, ändert jedoch nichts an der Obergrenze. Beispiel: DECIMAL(4,2) belegt 6 Byte Speicher und begrenzt die Daten auf den Bereich -99.99 .. +99.99 bei einer Genauigkeit (Auflösung) von +/- 0.01 |
|
||||||||||||||||
| ♦ Details zu Zahlen-Systemen und zu Gleitkomma-Zahlen nach IEEE-754 | |||||||||||||||||
Datum und Zeit |
|||||||||||||||||||
|
►
Ein Spezialfall ist die Möglichkeit, unbekannte Angaben von Jahr, Monat und/oder
Tag auf 0 zu setzen (Details). ► Illegale Werte (z.B. Monat>12, Minute>59) werden ignoriert, die Daten werden dann nicht eingetragen oder geändert. ► Ein Timestamp dient zum automatischen Speichern von Datum und Zeit der letzten Änderung eines Datensatzes. Eingabe und Änderung dieser Daten ist daher sinnlos. ► Unabhängig davon kann man Datum und Zeit auch in Zahlen-Feldern speichern, z.B. als INTEGER → Timestamp, als → Y1900-Datum oder als → Julianischer Tag. Speichern als Text (String) ist ungünstig: Hoher Speicherbedarf, man kann damit nicht rechnen, anfällig für Fehler. |
|
||||||||||||||||||
| ♦ Details zum Thema Datum und Zeit in SQL allgemein und MySQL speziell. | ♦ Details zum Thema Datum und Zeit und zu internen Daten-Formaten. | ||||||||||||||||||
Text (String) |
||||||||||||||||||||||||||||
|
►
CHAR belegt immer den kompletten deklarierten Speicherplatz,
unabhängig von der darin enthaltenen Text-Länge. ► Alle anderen Text-(String)-Typen belegen nur so viel Speicher wie der jeweilige Daten-Inhalt erfordert, dazu noch 1..4 Byte für die Codierung der Text-Länge. ► VARCHAR wird für kurze Texte empfohlen. Das Argument M begrenzt die Text-Länge. |
|
|||||||||||||||||||||||||||
|
Unicode. ► Wenn Text-Daten international ausgetauscht werden, oder wenn auch andere (slawische, griechische, cyrillische, ...) Sonderzeichen verwendet werden sollen, dann setzt man → UTF-8 codierten → Unicode ein. Das ist in Europa zumindest bei Namen und Adressen fast immer der Fall. |
► UTF-8 Codierung und -Decodierung muss allerdings vom User-Interface bereitgestellt werden. Die Daten selbst sind international eindeutig, sie werden auf jedem Betriebssystem jedes Landes korrekt dargestellt. ► UTF-8 Zeichen können 1..4 Byte Speicherplatz belegen. Die häufigen Standard-(ASCII)-Zeichen brauchen 1 Byte, Umlaute (auch griechische Zeichen u.a.) 2 Byte, diverse Sonderzeichen (z.B. €) 3..4 Byte. Das bedeutet: Unicode-Zeichen benötigen etwas mehr Speicherplatz als Texte im lokalen (1-Byte)-Zeichensatz. |
|||||||||||||||||||||||||||
|
►
Das Attribut Collation bezeichnet den verwendeten Zeichensatz. Wenn ein Zeichen in
diesem Zeichensatz nicht definiert ist, wird es als ? gespeichert.
Der Text "Größe" wird daher in einem ASCII-Textfeld
als "Gr??e" eingetragen. ► Die Collation steuert in erster Linie das Verhalten bei Sortierung. Die Tabelle rechts demonstriert (unverbindlich) das empirisch ermittelte Verhalten der deutschen Umlaute und des scharfen ß bei Sortierung. |
|
|||||||||||||||||||||||||||
Binär (Blob) |
||||||||||||||||
|
Moderne Datenbanken können selbstverständlich auch binäre Daten speichern.
Das betrifft vorwiegend Bilder, aber auch Audio- und andere Daten. ► Wenn eine Dazenbank keine Binär-Daten speichern kann, oder andere wichtige Gründe dagegen sprechen, dann kann man Binär-Daten mit verschiedenen Verfahren (z.B. BinHex) in Text-Daten umwandeln. Dabei wird die Datei vergrößert, kann aber wie einfacher Text mit jedem Medium übertragen und in jeder Datenbank gespeichert werden. |
|
|||||||||||||||
| ♦ Details zu den Themen Blob, PHP und Bilder / Binär-Strings. | ||||||||||||||||
|