Ich   Entwicklung   Lösungen Apache PHP mySQL  
 

Datentypen

Ganzzahlen (Integer)

Bei allen ganzzahligen numerischen Typen kann bei der Erschaffung der Tabelle das Schlüsselwort UNSIGNED angegeben werden, z.B. CREATE TABLE fee (test INT UNSIGNED NOT NULL), um nur positive Zahlen zuzulassen. Dies hat den Effekt, dass dieselbe Anzahl Zahlen im positiven Bereich zur Verfügung steht. Beispielsweise sind bei TINYINT die Zahlen von -127 bis +128 möglich; UNSIGNED sind es die Zahlen 0 bis 255.

TINYINT 8-bit-Zahl (d.h. -127 bis 128 bzw. 0 bis 255 wenn UNSIGNED)
SMALLINT 16-bit-Zahl (-32768 bis 32767 / 0 bis 65535)
MEDIUMINT 24-bit-Zahl (-8388608 bis 8388607 / 0 bis 16777215)
INT, INTEGER 32-bit-Zahl (-2147483648 bis 2147483647 / 0 bis 4294967295)
BIGINT 64-bit-Zahl (-9223372036854775808 bis 9223372036854775807, UNSIGNED sollte nicht benutzt werden)

Sie sollten zwar immer nur den nötigen Datentypen wählen, achten Sie aber darauf, dass sie den Datentyp nicht zu klein wählen! Dies gilt natürlich auch für die anderen Datentypen.

Fließkommazahlen

FLOAT kleine Fließkommazahl (einfacher Genauigkeit)
-3.402823466E+38 bis -1.175494351E-38, 0, und 1.175494351E-38 bis 3.402823466E+38
REAL, DOUBLE normale Fließkommazahl (doppelter Genauigkeit)
-1.7976931348623157E+308 bis -2.2250738585072014E-308, 0, und 2.2250738585072014E-308 bis 1.7976931348623157E+308
DECIMAL, NUMERIC als Zeichenkette gespeicherte Fließkommazahl doppelter Genauigkeit
zum Sinn von DECIMAL bzw. NUMERIC siehe unten

Bei allen Fließkommazahl-Datentypen kann optional eine Angabe (Stellen gesamt, Nachkommastellen) hinter dem Datentyp gemacht werden. Dies beeinflusst die Darstellung der Zahl. So bedeutet DOUBLE(10,2) eine Darstellung von 10 Zeichen, von denen 2 Nachkommastellen sind.

Um dies besser zu verdeutlichen, gehe ich hier kurz auf den Datentyp DECIMAL ein, der zwar ein Zwitter-Datentyp ist, aber oft gebraucht wird. Da DECIMAL als Zeichenkette gespeichert wird, kann man mit der Angabe von (Stellen gesamt, Nachkommastellen) sehr gut beeinflussen, wie eine gespeicherte Zahl genau dargestellt wird und wie groß sie sein darf. Wenn man beispielsweise Preise (in EUR o.ä.) in der Datenbank speichern will, empfiehlt sich der Datentyp DECIMAL, weil ich hier einfach eine Zahl wie 2159.90 eingeben kann und nicht ein Format wie 0.21599E+4 wählen muss. Hierzu kann ich meine Spalte beispielsweise mit DECIMAL(10,2) definieren.

Bei DECIMAL sollte man deshalb bei der Definition auf jeden Fall die Anzahl der Stellen und Nachkommastellen sofort mit angeben!

Datums- und Zeitangaben

DATE Ein einfaches Datum, gültig sind '1000-01-01' bis '9999-12-31'
TIME Zeitangabe, gültig sind '-838:59:59' bis '838:59:59'
DATETIME '1000-01-01 00:00:00' to '9999-12-31 23:59:59'
YEAR(2), YEAR(4) Eine Jahreszahlangabe (vierstellig 1901 bis 2155 und 0000, zweistellig 1970-2069)
TIMESTAMP, TIMESTAMP(14), TIMESTAMP(12), TIMESTAMP(8), TIMESTAMP(6) Zeitangabe als Unix-Timestamp, '1970-01-01 00:00:00' bis irgendwann 2037
Anzeige im Format YYYYMMDDHHMMSS (bei TIMESTAMP und TIMESTAMP(14)), YYMMDDHHMMSS (12), YYYYMMDD (8) oder YYMMDD (6)

Die Datums- und Zeittypen machen natürlich nur deshalb Sinn, weil SQL Funktionen bietet, die auf diese Datentypen zugeschnitten sind (siehe http://dev.mysql.com/doc/mysql/de/datetime.html und folgende Seiten).

Zeichen: CHAR und abgeleitete Typen

CHAR(Anzahl der Zeichen), CHARACTER(Anzahl der Zeichen) Kann die angegebene Anzahl von Zeichen speichern. Wenn weniger Zeichen gespeichert werden als in der Definition angegeben, füllt mySQL automatisch mit Leerzeichen auf. Zulässig sind CHAR(1) bis CHAR(255).
BIT, BOOL Synonyme fü CHAR(1). Kann benutzt werden, um WAHR ('1') oder FALSCH ('0') zu speichern.
VARCHAR, CHARACTER VARYING Zeichenfolge variabler Länge, allerdings maximal 255 Zeichen lang.

TEXT/BLOB und abgeleitete Typen

TINYTEXT, TINYBLOB Maximal 255 Zeichen (8 bit).
TEXT, BLOB Maximal 65535 Zeichen (16 bit).
MEDIUMTEXT, MEDIUMBLOB Maximal 16777215 Zeichen (24 bit).
LONGTEXT, LONGBLOB Maximal 4294967295 Zeichen (32 bit). Longtext ist mit Vorsicht zu geniessen, da Ein- und Ausgabe meist nicht so viele Zeichen zulassen.

BLOB ist die Abkürzung für 'binary large object'. BLOBs werden also binär gespeichert (was übrigens auch bei CHAR und VARCHAR durch das Schlüsselwort BINARY möglich ist), worauf ich an dieser Stelle nicht weiter eingehen möchte. Benutzen Sie zum Speichern von langen Zeichenketten TEXT und ähnliche, bis Sie wirklich wissen, was Sie tun.

Auswahllisten mit ENUM und SET

ENUM('wert1','wert2','wert3',...) eine Liste von maximal 65535 möglichen Werten. Beim Speichern kann nur nichts oder einer der definierten Werte angegeben werden (praktisch eine Auswahlliste). Beispiel: ENUM('Herr', 'Frau', 'Familie')
SET('wert1','wert2','wert3',...) Ähnlich ENUM, nur dass hier beim Speichern beliebig viele Werte gewählt werden können. SET ist auf 64 mögliche Werte beschränkt. Beispiel: SET('bit0', 'bit1', 'bit2', 'bit3')

Besonderheiten bei ENUM:

  • Wenn ein ungültiger Wert gespeichert wird, dann speichert mySQL eine leere Zeichenfolge (statt einer Fehlermeldung).
  • Bei Angabe von NOT NULL ist der erste mögliche Wert der DEFAULT-Wert, bei Angabe von NULL ist NULL der DEFAULT-Wert.
  • Die Werte haben zur einfacheren Auswahl mit SELECT ... WHERE ... einen Index, beginnend mit 1; der Index 0 ist für leere Zeichenketten (also Fehler) reserviert, NULL hat den Index NULL. Beispiel: SELECT enum_spalte FROM testtabelle WHERE enum_spalte=2;
Zusatzinfo

SET ist etwas komplizerter, weshalb ich an dieser Stelle für den interessierten Leser auf http://dev.mysql.com/doc/mysql/de/set.html verweise.

Lernen Sie als nächstes, wie Sie mit den MySQL-Funktionen von PHP 4 auf Ihre MySQL-Datenbank (3.23) zugreifen.

MySQL 3.23 mit PHP 4 weiter

Sollten Sie PHP 4 mit MySQL 4.1 nutzen wollen, kann ich Sie nur warnen, da hier einige Inkompabilitäten bestehen. Mehr zu diesem Thema finden Sie auf der Seite

MySQL 4.1 mit PHP 5 weiter

Lernen Sie als nächstes, wie Sie mit den MySQL- und/oder den neuen MySQLi-Funktionen von PHP 5 auf Ihre MySQL-Datenbank (ab 4.1) zugreifen.

MySQL 4.1 mit PHP 5 weiter

URL: www.intermitto.net/mysql/sql/datentypen/?PHPSESSID=1c93db4ea2ed350e02c21751eb03c35c
© 2004-05 Jens Becker - intermitto.net v5.1
Letzte Änderung: 23.08.2005

Home - Kontaktformular - Downloads - Suche und Sitemap - Impressum
Entwicklung - Problemlösungen - Tutorials: Apache PHP mySQL

user  pass