Heim  >  Artikel  >  Datenbank  >  Was ist der Wertebereich von TINYINT in MySQL?

Was ist der Wertebereich von TINYINT in MySQL?

WBOY
WBOYnach vorne
2023-06-03 18:58:474142Durchsuche

Projektszenario:

Kürzlich sah ich während des Entwicklungsprozesses ein dünnes Feld im Tischdesign, aber ich wurde neugierig auf seinen Umfang

Was ist der Wertebereich von TINYINT in MySQL? # 🎜🎜#

Problembeschreibung:

Wenn wir mehr als 128 Werte eingeben, meldet das Feld den folgenden Fehler

#🎜🎜 # Was ist der Wertebereich von TINYINT in MySQL?

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).

Wenn Sie also eine Tabelle erstellen, ist der eigentliche Effekt tatsächlich nur tinyint(3). Selbst wenn Sie tinyint(100) erstellen, hat es immer noch höchstens 3 Ziffern.

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?

Schauen 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)


Warum ist der vorzeichenbehaftete Mindestwert -127 und nicht -128? Dies ist der Kernpunkt dieses Artikels. In Computern werden negative Werte mit dem Komplementcode

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.
bigintGanzzahlige Daten (alle Zahlen) von -2^63 (-9223372036854775808) bis 2^63-1 (9223372036854775807). Die Speichergröße beträgt 8 Byte.

int
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.



smallint

von -2^15 (-32.768) bis 2^15 – 1 (32.767) Typdaten . Die Speichergröße beträgt 2 Byte.


tinyint

Ganzzahlige Daten von 0 bis 255. Die Speichergröße beträgt 1 Byte.

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.
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

1. Ändern Sie das Datentabellenfeld (ändern Sie es in int oder andere Typen)
2. Das Front-End-Eingabefeld wird überprüft, und wenn der Wert den Wert überschreitet, wird eine Popup-Eingabeaufforderung angezeigt (unfreundlich)

3 Der Back-End-Wert wird überprüft, und wenn er nicht übereinstimmt , eine Ausnahmeaufforderung wird ausgelöst (die dritte Methode, die ich verwendet habe) # 🎜🎜 #
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!

Stellungnahme:
Dieser Artikel ist reproduziert unter:yisu.com. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen