Kürzlich sah ich während des Entwicklungsprozesses ein dünnes Feld im Tischdesign, aber ich wurde neugierig auf seinen Umfang
# 🎜🎜#
Problembeschreibung: Wenn wir mehr als 128 Werte eingeben, meldet das Feld den folgenden Fehler#🎜🎜 #
Ursache:com.mysql.jdbc.MysqlDataTruncation:Data truncation:Out of range value for Column 'priority' at row 1;Ursachenanalyse: # 🎜🎜#Ganzzahlige Daten von -2^7 (-128) bis 2^7 - 1 (127). Die Speichergröße beträgt 1 Byte (nicht auf den unsignierten Typ UNSIGNED eingestellt).
Hier werde ich Ihnen einige populärwissenschaftliche Informationen darüber geben, warum Tinyint solche Einschränkungen aufweist
Der Wertebereich des Tinyint-Datentyps in MySQL reicht von signiert -128 bis 127. 0 bis 255 ist der Wertebereich im vorzeichenlosen Bereich. Sie können das offizielle „MySQL 5.1-Referenzhandbuch“ überprüfen.
Tinyint belegt 1 Byte Speicher Platz, also 8 Bit. Woher kommt also der Wertebereich von Tinyint?
Warum ist der vorzeichenbehaftete Mindestwert -127 und nicht -128? Dies ist der Kernpunkt dieses Artikels. In Computern werden negative Werte mit dem KomplementcodeSchauen wir uns zunächst den nicht signierten Fall an. Der vorzeichenlose Minimalwert ist, dass alle 8 Bits 0 sind, was bei der Konvertierung in eine Dezimalzahl 0 ist. Daher ist der minimale vorzeichenlose Tinyint-Wert 0. Der vorzeichenlose Maximalwert ist, dass alle 8 Bits 1 sind, was bei der Konvertierung in eine Dezimalzahl der Fall ist. Es ist 255. Das ist leicht zu verstehen. Wie kommt der Wertebereich von signiertem Tinyint zustande? In Computern wird das höchste Bit zur Darstellung von Symbolen verwendet. 0 steht für positiv, 1 für negativ und der Rest für numerische Werte. Dann vorzeichenbehaftetes 8bitMinimalwert:
1 1 1 1 1 1 1 1 = -127 (entspricht einem negativen Wert)
Maximalwert:
0 1 1 1 1 1 1 1 = +127 (zeigt einen positiven Wert an)
ausgedrückt. Warum ist der Mindestwert von vorzeichenbehaftetem TINYINT -128? Obwohl „-0“ auch „0“ ist, unterscheidet sich das Komplement von „-0“ gemäß dem Positiv-, Negativ- und Komplementsystem von „+0“, sodass es eine Situation gibt, in der zwei Komplemente einen numerischen Wert darstellen. Um das eigene Komplement mit Zahlen zu korrespondieren, wird künstlich festgelegt, dass „0“ immer durch „+0“ dargestellt werden soll. Um die Ressourcen voll auszunutzen, wird gleichzeitig der Komplementcode, der ursprünglich „-0“ darstellen sollte, als -128 angegeben.
Zusätzliche Wissenspunkterweiterung
Eine kurze Einführung in die Hauptunterschiede zwischen int, bigint, smallint und tinyint in MySQL# 🎜🎜 #
Als ich kürzlich die MySQL-Datenbank verwendete, stieß ich auf verschiedene Zahlentypen, hauptsächlich int, bigint, smallint und tinyint. Was verwirrender ist, ist der Unterschied zwischen int und smallint. Ich werde ihn in meinem Blog aufschreiben:
Verwenden Sie den genauen numerischen Datentyp von Ganzzahldaten.
int
bigintGanzzahlige Daten (alle Zahlen) von -2^63 (-9223372036854775808) bis 2^63-1 (9223372036854775807). Die Speichergröße beträgt 8 Byte.
von -2^31 (-2.147.483.648) bis 2^31 – 1 (2.147.483.647)# 🎜 🎜# Ganzzahldaten (alle Zahlen). Die Speichergröße beträgt 4 Byte. Das SQL-92-Synonym für int ist Integer.von -2^15 (-32.768) bis 2^15 – 1 (32.767) Typdaten . Die Speichergröße beträgt 2 Byte.
smallint
Ganzzahlige Daten von 0 bis 255. Die Speichergröße beträgt 1 Byte.
tinyint
2. Das Front-End-Eingabefeld wird überprüft, und wenn der Wert den Wert überschreitet, wird eine Popup-Eingabeaufforderung angezeigt (unfreundlich)Ergänzung: Unterstützt den Bigint-Datentyp, bei dem ganzzahlige Werte unterstützt werden. Bigint wird jedoch in einigen Sonderfällen verwendet. Wenn der Ganzzahlwert den vom int-Datentyp unterstützten Bereich überschreitet, kann Bigint verwendet werden. In SQL Server ist der int-Datentyp der primäre ganzzahlige Datentyp.
1. Ändern Sie das Datentabellenfeld (ändern Sie es in int oder andere Typen)
In der Datentyp-Prioritätstabelle liegt bigint zwischen smallmoney und int.
Die Funktion gibt bigint nur zurück, wenn der Parameterausdruck vom Datentyp bigint ist. SQL Server stuft andere ganzzahlige Datentypen (tinyint, smallint und int) nicht automatisch zu bigint hoch. int(M) Im Integer-Datentyp stellt M die maximale Anzeigebreite dar. In int(M) hat der Wert von M nichts damit zu tun, wie viel Speicherplatz int(M) einnimmt. Es hat nichts mit der Anzahl der Ziffern zu tun, int(3), int(4) und int(8) belegen alle 4 Byte Speicherplatz auf der Festplatte.
Lösung:
Es gibt drei Hauptlösungen
Assert.isTrue(!(rule.getPriority()!= null && rule.getPriority()>100),"支持最大优先级数为100!");
Das obige ist der detaillierte Inhalt vonWas ist der Wertebereich von TINYINT in MySQL?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!