Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Was ist der Bedeutungsparameter TINYINT(parameter)?

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?