Wenn wir eine Argumentlänge mit numerischen Datentypen verwenden, gibt dies meines Wissens die Anzeigebreite an.
Ich habe folgendes versucht:
mysql> create table boolean_test (var1 boolean, var2 tinyint);
Query OK, 0 rows affected (0.10 sec)
mysql> show create table boolean_test;
+--------------+-------------------------
| Table | Create Table
+--------------+-------------------------
| boolean_test | CREATE TABLE `boolean_test` (
`var1` tinyint(1) DEFAULT NULL,
`var2` tinyint(4) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1 |
+--------------+---------------------------
1 row in set (0.00 sec)
Erstens ist tinyint ein 1-Byte-Wert. Also, was ist die Bedeutung von tinyint(4)
? Es können keine 4 Ziffern eingegeben werden.
mysql> insert into boolean_test values(101,112);
Query OK, 1 row affected (0.03 sec)
mysql> select * from boolean_test;
+------+------+
| var1 | var2 |
+------+------+
| 10 | 112 |
| 101 | 112 |
+------+------+
2 rows in set (0.00 sec)
Ich sehe, dass ich in tinyint eine 10 und eine 101 gespeichert habe und diese Werte zurückbekommen konnte, obwohl sie als tinyint (1) definiert sind.
Sollte ich nicht eine 1 für sehen var1
? Dh nur 1 Anzeigestellen?
Antworten:
Daten-weise,
tinyint(1)
,tinyint(2)
,tinyint(3)
etc. sind alle genau gleich. Sie liegen alle im Bereich von -128 bis 127 fürSIGNED
oder 0-255 fürUNSIGNED
. Wie andere Antworten angemerkt haben, ist die Zahl in Klammern lediglich ein Hinweis auf die Anzeigebreite.Sie sollten jedoch beachten, dass anwendungsbezogene Dinge möglicherweise anders aussehen. Hier
tinyint(1)
kann eine besondere Bedeutung zukommen. Beispielsweise wird der Connector / J (Java-Connector)tinyint(1)
als boolescher Wert behandelt und konvertiert Werte intrue
und , anstatt ein numerisches Ergebnis an die Anwendung zurückzugebenfalse
. Dies kann über dentinyInt1isBit=false
Verbindungsparameter geändert werden.quelle
Eine tinyint (1) kann Zahlen im Bereich von -128 bis 127 enthalten, da der Datentyp 8 Bit (1 Byte) beträgt - offensichtlich kann eine tinyint ohne Vorzeichen Werte von 0 bis 255 enthalten.
Außerhalb des Bereichs liegende Werte werden stillschweigend abgeschnitten:
... es sei denn, Sie ändern die
sql_mode
oder ändern die Serverkonfiguration:Der in der DDL für den Datentyp verwendete Wert (z. B. tinyint (1)) ist, wie Sie vermutet haben, die Anzeigebreite. Es ist jedoch optional und die Clients müssen es nicht verwenden. Der Standard-MySQL-Client verwendet es beispielsweise nicht.
quelle