Datentechnisch tinyint(1)
, tinyint(2)
, tinyint(3)
usw. sind alle genau gleich. Sie liegen alle im Bereich von -128 bis 127 für SIGNED
oder 0-255 für UNSIGNED
. Wie andere Antworten angemerkt haben, ist die Zahl in Klammern lediglich ein Hinweis auf die Anzeigebreite.
Beachten Sie jedoch, dass die Dinge in Bezug auf die Anwendung anders aussehen können. Hier, tinyint(1)
kann eine besondere Bedeutung haben. Beispielsweise behandelt der Connector/J (Java-Connector) tinyint(1)
als boolescher Wert, und anstatt ein numerisches Ergebnis an die Anwendung zurückzugeben, wandelt es Werte in true
um und false
. dies kann über tinyInt1isBit=false
geändert werden Verbindungsparameter.
Ein tinyint(1) kann Zahlen im Bereich von -128 bis 127 enthalten, da der Datentyp 8 Bit (1 Byte) ist - offensichtlich kann ein unsigned tinyint Werte von 0-255 enthalten.
Werte außerhalb des gültigen Bereichs werden stillschweigend abgeschnitten:
mysql> create table a
-> (
-> ttt tinyint(1)
-> );
Query OK, 0 rows affected (0.01 sec)
mysql> insert into a values ( 127 );
Query OK, 1 row affected (0.00 sec)
mysql> insert into a values ( -128 );
Query OK, 1 row affected (0.00 sec)
mysql> insert into a values ( 128 );
Query OK, 1 row affected, 1 warning (0.00 sec)
mysql> insert into a values ( -129 );
Query OK, 1 row affected, 1 warning (0.00 sec)
mysql> select * from a;
+------+
| ttt |
+------+
| 127 |
| -128 |
| 127 |
| -128 |
+------+
4 rows in set (0.00 sec)
mysql>
... es sei denn, Sie ändern den sql_mode
oder ändern Sie die Serverkonfiguration:
mysql> set sql_mode=STRICT_ALL_TABLES;
Query OK, 0 rows affected (0.00 sec)
mysql> insert into a values ( -129 );
ERROR 1264 (22003): Out of range value for column 'ttt' at row 1
mysql>
Der in der DDL verwendete Wert für den Datentyp (z. B.:tinyint(1)) ist, wie Sie vermutet haben, die Anzeigebreite. Es ist jedoch optional und Clients müssen es nicht verwenden. Der Standard-MySQL-Client verwendet es beispielsweise nicht.
https://dev.mysql .com/doc/refman/5.1/en/integer-types.html
https://dev .mysql.com/doc/refman/5.0/en/numeric-type-overview.html
MySql:Tinyint (2 ) vs tinyint(1) - was ist der Unterschied?