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

So exportieren Sie die MySQL-Tabellenstruktur nach Excel

Die Voraussetzungen sind wie folgt Exportieren Si...

Analyse des MySQL-Client-Installationsprozesses auf dem Mac

Versuchen Sie die Installation über Pip in einer ...

Tipps, wie Sie aus Pixeln umfassende Markenerlebnisse machen

Herausgeber: In diesem Artikel wird die Rolle erö...

So installieren Sie MySQL 5.7.29 mit einem Klick mithilfe eines Shell-Skripts

Dieser Artikel bezieht sich auf die Arbeit des 51...

Elemente der Benutzererfahrung oder Elemente des Webdesigns

System- und Benutzerumgebungsdesign <br />D...

Zweistündiges Docker-Einführungstutorial

Inhaltsverzeichnis 1.0 Einleitung 2.0 Docker-Inst...

JavaScript implementiert das mobile Puzzlespiel mit neun Rastern

In diesem Artikel wird der spezifische Code für J...

Interpretieren von MySQL-Client- und Serverprotokollen

Inhaltsverzeichnis MySQL-Client/Server-Protokoll ...

Vue implementiert einfache Rechnerfunktion

In diesem Artikelbeispiel wird der spezifische Co...

js zur Implementierung eines einfachen Bullet-Screen-Systems

In diesem Artikel wird der spezifische Code von n...