Detaillierte Erklärung der Bedeutung von N und M im MySQL-Datentyp DECIMAL(N,M)

Detaillierte Erklärung der Bedeutung von N und M im MySQL-Datentyp DECIMAL(N,M)

Ein Kollege fragte mich, was N und M im MySQL-Datentyp DECIMAL(N,M) bedeuten. Natürlich ist M die Anzahl der Dezimalstellen nach dem Komma, aber ist dieses N die maximale Anzahl von Ziffern vor dem Komma oder die maximale Anzahl von Ziffern nach dem Hinzufügen des Dezimalteils? Ich kann mich wirklich nicht daran erinnern. Also habe ich zur Überprüfung eine Testtabelle erstellt und die Ergebnisse sind wie folgt:

Testtabelle, Feld „seller_cost“ ist definiert als decimal(14,2)

TABELLE `test_decimal` erstellen (
 `id` int(11) NICHT NULL,
 `Verkäuferkosten` Dezimalzahl (14,2) STANDARD NULL
) ENGINE=InnoDB STANDARD-CHARSET=utf8

Zunächst ist die Tabelle leer.

mysql> wähle * aus test_decimal;
Leerer Satz (0,00 Sek.)

Das Einfügen einer Zahl mit einer ganzzahligen Teillänge von 14 führt zu einem Fehler, dass der Spaltenbereich überschritten wird.

mysql> einfügen in test_decimal(id,seller_cost) Werte(1,12345678901234);
FEHLER 1264 (22003): Wert für Spalte „seller_cost“ in Zeile 1 liegt außerhalb des gültigen Bereichs

Das Einfügen einer Zahl mit einer ganzzahligen Teillänge von 12 kann korrekt eingefügt werden

mysql> einfügen in test_decimal(id,seller_cost) Werte(1,123456789012);
Abfrage OK, 1 Zeile betroffen (0,00 Sek.)

Abfrage der Tabelle und Feststellung, dass MySQL am Ende des eingefügten Integer-Wertes zwei Dezimalstellen ".00" hinzufügt

mysql> wähle * aus test_decimal;
+----+-----------------+
| ID | Verkäuferkosten |
+----+-----------------+
| 1 | 123456789012,00 |
+----+-----------------+
1 Zeile im Satz (0,00 Sek.)

Fügen Sie weiterhin Zahlen mit 12 Ziffern für den ganzzahligen Teil und 5 Ziffern für den Dezimalteil ein. Die Zahl kann erfolgreich eingefügt werden, es wird jedoch eine Warnung angezeigt. Die Warnung weist darauf hin, dass der Dezimalteil auf zwei Dezimalstellen gekürzt wurde.

mysql> einfügen in test_decimal(id,seller_cost) Werte(1,123456789012.12345);
Abfrage OK, 1 Zeile betroffen, 1 Warnung (0,00 Sek.)
 
mysql> Warnungen anzeigen;
+-------+------+--------------------------------------------------+
| Ebene | Code | Nachricht |
+-------+------+--------------------------------------------------+
| Hinweis | 1265 | Daten für Spalte „seller_cost“ in Zeile 1 abgeschnitten |
+-------+------+--------------------------------------------------+
1 Zeile im Satz (0,00 Sek.)
 
mysql> wähle * aus test_decimal;
+----+-----------------+
| ID | Verkäuferkosten |
+----+-----------------+
| 1 | 123456789012,00 |
| 1 | 123456789012.12 |
+----+-----------------+
2 Zeilen im Satz (0,00 Sek.)

Die Länge des ganzzahligen Teils wird auf 2 reduziert und die Länge des Dezimalteils bleibt 5. Das Einfügen kann erfolgreich sein, aber der Dezimalteil wird auf zwei Ziffern gekürzt.

mysql> einfügen in test_decimal(id,seller_cost) Werte(1,12.12345);
Abfrage OK, 1 Zeile betroffen, 1 Warnung (0,00 Sek.)
 
mysql> Warnungen anzeigen;
+-------+------+--------------------------------------------------+
| Ebene | Code | Nachricht |
+-------+------+--------------------------------------------------+
| Hinweis | 1265 | Daten für Spalte „seller_cost“ in Zeile 1 abgeschnitten |
+-------+------+--------------------------------------------------+
1 Zeile im Satz (0,00 Sek.)
 
mysql> wähle * aus test_decimal;
+----+-----------------+
| ID | Verkäuferkosten |
+----+-----------------+
| 1 | 123456789012,00 |
| 1 | 123456789012.12 |
| 1 | 12.12 |
+----+-----------------+
3 Zeilen im Satz (0,00 Sek.)

Geben Sie weiterhin eine Zahl ein, deren Dezimalteil weniger als zwei Ziffern beträgt. Diese kann korrekt eingefügt werden und der Dezimalteil wird automatisch auf zwei Ziffern gerundet.

mysql> einfügen in test_decimal(id,seller_cost) Werte(1,12.1);
Abfrage OK, 1 Zeile betroffen (0,00 Sek.)
 
mysql> wähle * aus test_decimal;
+----+-----------------+
| ID | Verkäuferkosten |
+----+-----------------+
| 1 | 123456789012,00 |
| 1 | 123456789012.12 |
| 1 | 12.12 |
| 1 | 12.10 |
+----+-----------------+
4 Zeilen im Satz (0,00 Sek.)

Zusammenfassend ist der M-Wert in DECIMAL(N,M) die Anzahl der Dezimalstellen. Wenn der eingefügte Wert den Dezimalteil nicht angibt oder der Dezimalteil weniger als M Ziffern hat, wird er automatisch auf M Dezimalstellen aufgefüllt. Wenn der Dezimalteil des eingefügten Werts M überschreitet, wird er abgeschnitten und die ersten M Dezimalstellen werden abgeschnitten. N ist die Gesamtlänge des ganzzahligen Teils und des Dezimalteils, d. h. der ganzzahlige Teil der eingefügten Zahl darf nicht mehr als NM Ziffern haben, da er sonst nicht erfolgreich eingefügt werden kann und ein Fehler „außerhalb des Bereichs“ gemeldet wird.

Zusammenfassen

Dies ist der gesamte Inhalt dieses Artikels zur detaillierten Erklärung der Bedeutung von N und M im MySQL-Datentyp DECIMAL(N,M). Ich hoffe, er wird für alle hilfreich sein. Interessierte Freunde können weiterhin auf diese Site verweisen: Beispiele für die Verwendung von oder Anweisungen in MySQL, eine kurze Beschreibung der Unterschiede zwischen Redis und MySQL usw. Wenn Sie Fragen haben, können Sie jederzeit eine Nachricht hinterlassen und der Herausgeber wird Ihnen rechtzeitig antworten. Vielen Dank, Freunde, für die Unterstützung dieser Site!

Das könnte Sie auch interessieren:
  • Eine kurze Einführung in die Verwendung des Dezimaltyps in MySQL
  • Der Unterschied zwischen dem Dezimaltyp und dem Float Double in MySQL (ausführliche Erklärung)
  • Methode zum Konvertieren einer numerischen Zeichenfolge in wissenschaftlicher Notation in den Dezimaltyp
  • Datenbankdatentyp Float zum C#-Typ Dezimal, Konvertierung des Float-Datentyps ist ungültig
  • Detaillierte Erklärung der Verwendung von DECIMAL im MySQL-Datentyp
  • Implementierung der MySQL-Dezimaldatentypkonvertierung
  • Detaillierte Erläuterung des Dezimal-Padding-Problems des Dezimal-Datentyps in MySQL
  • Detaillierte Erklärung zur Verwendung des MySQL-Datentyps DECIMAL
  • Ausführliche Erläuterung der Verwendung und Implementierung des Decimal-Typs in der Datenbank

<<:  Installation von VMware Workstation unter Linux (Ubuntu)

>>:  WeChat-Applet implementiert Formularüberprüfung

Artikel empfehlen

Regeln für die Verwendung gemeinsamer MySQL-Indizes

Ein gemeinsamer Index wird auch als zusammengeset...

Ubuntu16.04 Installation mysql5.7.22 Grafik-Tutorial

Installations-Tutorial für VMware12.0+Ubuntu16.04...

SMS-Bestätigungscode-Anmeldefunktion basierend auf Antd Pro (Prozessanalyse)

Inhaltsverzeichnis Zusammenfassung Gesamtprozess ...

js, um einen einfachen Taschenrechner zu erstellen

In diesem Artikel finden Sie den spezifischen Cod...

Detailliertes Tutorial zum Konfigurieren der lokalen Yum-Quelle in CentOS8

Die Centos8-Distribution wird über die BaseOS- un...

Einige Möglichkeiten zum Eliminieren doppelter Zeilen in MySQL

SQL-Anweisung /* Einige Methoden zum Eliminieren ...

CSS erzielt den Effekt der Vermischung zweier Elemente (Sticky-Effekt)

Ich erinnere mich, dass es vor ein paar Jahren in...

So verwenden Sie den Linux-Befehl tr

01. Befehlsübersicht Der Befehl tr kann Zeichen a...

Tutorial zur kostenlosen Konfiguration der MySQL 5.7.18-Installationsversion

Installations-Tutorial zur kostenlosen Installati...

So installieren Sie MySQL und MariaDB in Docker

Beziehung zwischen MySQL und MariaDB Das Datenban...

MySQL lernen: Drei Paradigmen für Anfänger

Inhaltsverzeichnis 1. Paradigmenfundament 1.1 Der...