Datamæssigt, tinyint(1)
, tinyint(2)
, tinyint(3)
osv. er alle nøjagtig ens. De er alle i området -128 til 127 for SIGNED
eller 0-255 for UNSIGNED
. Som andre svar bemærkede, er tallet i parentes kun et tip om visningsbredden.
Du vil måske dog bemærke, at applikationsmæssigt kan tingene se anderledes ud. Her tinyint(1)
kan få en særlig betydning. For eksempel behandler Connector/J (Java connector) tinyint(1)
som en boolsk værdi, og i stedet for at returnere et numerisk resultat til applikationen, konverterer den værdier til true
og false
. dette kan ændres via tinyInt1isBit=false
forbindelsesparameter.
En tinyint(1) kan indeholde tal i området -128 til 127, da datatypen er 8 bit (1 byte) - naturligvis kan en usigneret tinyint holde værdierne 0-255.
Det vil lydløst afkorte værdier uden for området:
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>
... medmindre du ændrer sql_mode
eller ændre serverkonfigurationen:
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>
Den værdi, der bruges i DDL for datatypen (f.eks.:tinyint(1)), er, som du har mistænkt, visningsbredden. Det er dog valgfrit, og kunderne behøver ikke bruge det. Standard MySQL-klienten bruger det f.eks. ikke.
https://dev.mysql .com/doc/refman/5.1/da/integer-types.html
https://dev .mysql.com/doc/refman/5.0/en/numeric-type-overview.html
MySql:Tinyint (2 ) vs tinyint(1) - hvad er forskellen?