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

Zusammenfassung der verschiedenen Haltungen der MySQL-Berechtigungseskalation

Inhaltsverzeichnis 1. Schreiben Sie Webshell in d...

Beispielcode zur einfachen Implementierung des Seitenlayouts mit Flex-Layout

Kommen wir ohne weitere Umschweife direkt zum Cod...

So schreiben Sie asynchrone Aufgaben in modernem JavaScript

Vorwort In diesem Artikel untersuchen wir die Ent...

So sammeln Sie Nginx-Protokolle mit Filebeat

Mithilfe von Nginx-Protokollen lassen sich Benutz...

Praktische Optimierung des MySQL-Paging-Limits

Vorwort Wenn wir Abfrageanweisungen verwenden, mü...

Befehl zum Anzeigen der Erstellungszeit der Binlog-Datei unter Linux

Inhaltsverzeichnis Hintergrund analysieren Verfah...

Vue implementiert Beispielcode zur Formulardatenvalidierung

Fügen Sie dem el-form-Formular Regeln hinzu: Defi...

Zusammenfassung verschiedener Methoden zur MySQL-Datenwiederherstellung

Inhaltsverzeichnis 1. Einleitung 2. Direkte Wiede...

Detaillierte Erklärung der Transaktionen und Indizes in der MySQL-Datenbank

Inhaltsverzeichnis 1. Angelegenheiten: Vier Haupt...

Detaillierte Erklärung der einfachen HTML- und CSS-Verwendung

Ich werde drei Tage benötigen, um den statischen ...