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:
|
<<: Installation von VMware Workstation unter Linux (Ubuntu)
>>: WeChat-Applet implementiert Formularüberprüfung
Wenn wir ein SVG-Bild zur Anzeige hinzufügen, erh...
In diesem Artikelbeispiel wird der spezifische Co...
Ein gemeinsamer Index wird auch als zusammengeset...
Installations-Tutorial für VMware12.0+Ubuntu16.04...
Inhaltsverzeichnis Zusammenfassung Gesamtprozess ...
In diesem Artikel finden Sie den spezifischen Cod...
Die Centos8-Distribution wird über die BaseOS- un...
SQL-Anweisung /* Einige Methoden zum Eliminieren ...
Inhaltsverzeichnis 1. MySQL-Platzhalter-Fuzzy-Abf...
Ich erinnere mich, dass es vor ein paar Jahren in...
Im Projekt werden Sie auf benutzerdefinierte öffe...
01. Befehlsübersicht Der Befehl tr kann Zeichen a...
Installations-Tutorial zur kostenlosen Installati...
Beziehung zwischen MySQL und MariaDB Das Datenban...
Inhaltsverzeichnis 1. Paradigmenfundament 1.1 Der...