Heim  >  Artikel  >  Datenbank  >  Numerischer MySQL-Typ

Numerischer MySQL-Typ

伊谢尔伦
伊谢尔伦Original
2016-11-23 13:21:211333Durchsuche

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.

Typ Bytes Minimaler Wert Maximaler Wert

(Signed/Unsigned) (Signed/Unsigned)

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 9223 372036854775807

0 18446744073709551615

MySQL auch unterstützt die Auswahl von Klammern nach diesem Schlüsselworttyp. Gibt die Anzeigebreite eines ganzzahligen Werts an (z Beispiel: 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 auf Probleme stößt, 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 zur ursprünglichen 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 der Spalte automatisch das UNSIGNED-Attribut 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 DOUBLE PRECISION(M,D). Hier bedeutet „(M,D)“, dass der Wert insgesamt M-stellige Ganzzahlen anzeigt, wobei sich D-Stellen nach dem Dezimalpunkt befinden. 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 Stellen im Wert gespeichert werden können, und die Skala gibt an, wie viele Stellen 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 in diesem Fall der Wertebereich, der in der Gehaltsspalte gespeichert werden kann, zwischen -999,99 und 999,99.

In Standard-SQL entspricht die Syntax DECIMAL(M) DECIMAL(M,0). In ähnlicher Weise 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. Der Standardwert von M 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 die Speicherung von M-Bit-Werten. M reicht von 1 bis 64.

Um einen Bitwert anzugeben, verwenden Sie das Symbol b'value'. value 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 der Spalte BIT(M) 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 jeweils 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 in der Spalte im nicht strengen Modus 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.


Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Vorheriger Artikel:MySQL-Datums- und ZeittypenNächster Artikel:MySQL-Datums- und Zeittypen