MySQL unterstützt alle standardmäßigen numerischen SQL-Datentypen. Zu diesen Typen gehören strikte numerische Datentypen (INTEGER, SMALLINT, DECIMAL und NUMERIC) und ungefähre numerische Datentypen (FLOAT, REAL und DOUBLE PRECISION). Das Schlüsselwort INT ist ein Synonym für INTEGER und das Schlüsselwort DEC ist ein Synonym für DECIMAL.
Der BIT-Datentyp speichert Bitfeldwerte und unterstützt MyISAM-, MEMORY-, InnoDB- und BDB-Tabellen.
Als Erweiterung des SQL-Standards unterstützt MySQL auch die Integer-Typen TINYINT, MEDIUMINT und BIGINT. Die folgende Tabelle zeigt den für jeden Ganzzahltyp erforderlichen Speicher und Bereich.
类型 | 字节 | 最小值 | 最大值 |
(带符号的/无符号的) | (带符号的/无符号的) | ||
TINYINT | 1 | -128 | 127 |
0 | 255 | ||
SMALLINT | 2 | -32768 | 32767 |
0 | 65535 | ||
MEDIUMINT | 3 | -8388608 | 8388607 |
0 | 16777215 | ||
INT | 4 | -2147483648 | 2147483647 |
0 | 4294967295 | ||
BIGINT | 8 | -9223372036854775808 | 9223372036854775807 |
0 | 18446744073709551615 |
MySQL unterstützt auch die Option, die Anzeigebreite eines ganzzahligen Werts in Klammern nach dem Typschlüsselwort anzugeben (z. B. INT(4)). Die optionale Angabe der Anzeigebreite wird verwendet, um die Breite von links zu füllen, wenn die Anzeigebreite kleiner als die angegebene Spaltenbreite ist.
Die Anzeigebreite schränkt weder den Wertebereich ein, der in der Spalte gespeichert werden kann, noch die Anzeige von Werten, die die angegebene Spaltenbreite überschreiten.
Bei Verwendung in Kombination mit dem optionalen erweiterten Attribut ZEROFILL werden die standardmäßigen zusätzlichen Leerzeichen durch Nullen ersetzt. Beispielsweise wird für eine als INT(5) ZEROFILL deklarierte Spalte der Wert 4 als 00004 abgerufen. Bitte beachten Sie, dass MySQL bei der Generierung temporärer Tabellen für komplexe Joins Probleme bekommt, wenn Sie in einer Integer-Spalte einen Wert speichern, der die angezeigte Breite überschreitet, da MySQL in diesen Fällen davon ausgeht, dass die Daten in die ursprüngliche Spaltenbreite passen.
Alle Ganzzahltypen können ein optionales (nicht standardmäßiges) Attribut UNSIGNED haben. Werte ohne Vorzeichen können verwendet werden, wenn Sie in einer Spalte nur nicht negative Zahlen zulassen möchten und die Spalte einen größeren oberen Zahlenbereich erfordert.
Gleitkomma- und Festkommatypen können auch UNSIGNED sein. Für denselben Zahlentyp verhindert diese Eigenschaft, dass negative Werte in der Spalte gespeichert werden. Im Gegensatz zu ganzzahligen Typen bleibt der obere Bereich der Spaltenwerte jedoch unverändert.
Wenn ZEROFILL für eine numerische Spalte angegeben wird, fügt MySQL automatisch das UNSIGNED-Attribut zur Spalte hinzu.
Für Gleitkomma-Spaltentypen verwenden Werte mit einfacher Genauigkeit 4 Bytes und Werte mit doppelter Genauigkeit 8 Bytes in MySQL.
Der FLOAT-Typ wird verwendet, um ungefähre numerische Datentypen darzustellen. Mit dem SQL-Standard können Sie optional die Genauigkeit in Bits (jedoch nicht in exponentiellen Bereichen) in Klammern nach dem Schlüsselwort FLOAT angeben. MySQL unterstützt auch optionale Präzisionsspezifikationen, die nur zur Bestimmung der Speichergröße verwendet werden. Genauigkeiten von 0 bis 23 entsprechen der 4-Byte-Einzelgenauigkeit der FLOAT-Spalte. Genauigkeiten von 24 bis 53 entsprechen der 8-Byte-Doppelgenauigkeit der DOUBLE-Spalte.
MySQL erlaubt die Verwendung einer nicht standardmäßigen Syntax: FLOAT(M,D) oder REAL(M,D) Oder DOPPELTE PRÄZISION(M,D). Hier bedeutet „(M,D)“, dass der Wert insgesamt M ganze Zahlen anzeigt, in denen sich die Ziffern D befinden nach dem Komma. Beispielsweise könnte eine als FLOAT(7,4) definierte Spalte als -999,9999 angezeigt werden. MySQL rundet den Wert beim Speichern. Wenn Sie also 999,00009 in die Spalte FLOAT(7,4) einfügen, ist das ungefähre Ergebnis 999,0001.
MySQL behandelt DOUBLE als Synonym für DOUBLE PRECISION (nicht standardmäßige Erweiterung). MySQL behandelt REAL auch als Synonym für DOUBLE PRECISION (nicht standardmäßige Erweiterung), es sei denn, der SQL Server-Modus enthält die Option REAL_AS_FLOAT.
Um die größtmögliche Portabilität zu gewährleisten, sollte Code, der die Speicherung ungefährer numerischer Datenwerte erfordert, FLOAT oder DOUBLE PRECISION verwenden, ohne die Genauigkeit oder Anzahl der Ziffern anzugeben.
DECIMAL- und NUMERIC-Typen werden in MySQL als derselbe Typ behandelt. Sie werden zur Speicherung von Werten verwendet, die eine genaue Genauigkeit erfordern, beispielsweise Währungsdaten. Wenn Sie eine Spalte dieses Typs deklarieren, können Sie (und tun dies normalerweise) die Genauigkeit und den Maßstab angeben, zum Beispiel:
salary DECIMAL(5,2)
In diesem Beispiel ist 5 die Genauigkeit und 2 der Maßstab. Die Präzision gibt an, wie viele Ziffern im Wert gespeichert werden können, und die Skala gibt an, wie viele Ziffern nach dem Dezimalpunkt gespeichert werden können.
Speichern Sie DECIMAL- und NUMERIC-Werte im Binärformat in MySQL 5.1.
Standard-SQL erfordert, dass die Gehaltsspalte jeden Wert mit 5 Ganzzahlen und zwei Dezimalstellen enthalten kann. Daher liegt der Wertebereich, der in der Gehaltsspalte gespeichert werden kann, in diesem Fall zwischen -999,99 und 999,99.
In Standard-SQL entspricht die Syntax DECIMAL(M) DECIMAL(M,0). Ebenso entspricht die Syntax DECIMAL DECIMAL(M,0), und der Wert von M kann durch Berechnung bestimmt werden. Variable Formen der Datentypen DECIMAL und NUMERIC werden in MySQL 5.1 unterstützt. MDer Standardwert ist 10.
Die maximale Anzahl von Ziffern für eine DEZIMAL- oder NUMERISCHE Spalte beträgt 65, aber der tatsächliche Bereich einer bestimmten DEZIMAL- oder NUMERISCHEN Spalte wird durch die Genauigkeit oder Skalierung der spezifischen Spalte eingeschränkt. Wenn einer solchen Spalte ein Wert mit mehr Nachkommastellen zugewiesen wird, als die angegebene Skala zulässt, wird der Wert in diese Skala konvertiert. (Der konkrete Vorgang hängt vom Betriebssystem ab, aber im Allgemeinen werden die Ergebnisse auf die zulässige Anzahl von Ziffern gekürzt).
Der BIT-Datentyp kann zum Speichern von Bitfeldwerten verwendet werden. Der Typ BIT(M) ermöglicht das Speichern von M Bitwerten. M reicht von 1 bis 64.
Um einen Bitwert anzugeben, können Sie das Symbol b'Wert' verwenden. Wert ist ein binärer Wert, der mit 0 und 1 geschrieben wird. Beispielsweise stehen b'111' und b'100000000' für 7 bzw. 128.
Wenn die Länge des einer BIT(M)-Spalte zugewiesenen Werts weniger als M Bits beträgt, füllen Sie die linke Seite des Werts mit Nullen auf. Beispielsweise hat die Zuweisung eines Werts b'101' zur Spalte BIT(6) den gleichen Effekt wie die Zuweisung von b'000101'.
Wenn Sie einen Wert in einer numerischen Spalte speichern möchten, der den zulässigen Bereich der Spalte überschreitet, hängt die Funktionsweise von MySQL vom zu diesem Zeitpunkt gültigen SQL-Modus ab. Wenn der Modus nicht festgelegt ist, schneidet MySQL den Wert auf den entsprechenden Endpunkt des Bereichs ab und speichert den abgeschnittenen Wert. Wenn der Modus jedoch auf traditionell („strikter Modus“) eingestellt ist, werden Werte außerhalb des Bereichs mit einem Fehler zurückgewiesen und Einfügungen schlagen gemäß SQL-Standards fehl.
Wenn die INT-Spalte UNSIGNED ist, bleibt die Größe des Spaltenbereichs gleich, aber seine Endpunkte ändern sich in 0 und 4294967295. Wenn Sie versuchen, -9999999999 und 9999999999 zu speichern, sind die im nicht strengen Modus in der Spalte gespeicherten Werte 0 und 4294967296.
Wenn der in einer Gleitkomma- oder Festkommaspalte zugewiesene Wert den durch die angegebene (oder Standard-)Genauigkeit und Skalierung angegebenen Bereich überschreitet, speichert MySQL den Wert, der den entsprechenden Endpunkt des Bereichs darstellt, in nicht strenger Form Modus.
Wenn MySQL nicht im strikten Modus arbeitet, werden Konvertierungen aufgrund von Clipping als Warnungen für ALTER TABLE-, LOAD DATA INFILE-, UPDATE- und mehrzeilige INSERT-Anweisungen gemeldet. Wenn MySQL im strikten Modus arbeitet, schlagen diese Anweisungen fehl und einige oder alle Werte werden nicht eingefügt oder geändert, je nachdem, ob die Tabelle transaktional ist und andere Faktoren.
Das Obige ist der Inhalt von MySQL Basic Tutorial 1 – Numerischer Datentyp. Weitere verwandte Inhalte finden Sie auf der chinesischen PHP-Website (www.php.cn)!