Pokud jde o data, tinyint(1)
, tinyint(2)
, tinyint(3)
atd. jsou všechny úplně stejné. Všechny jsou v rozsahu -128 až 127 pro SIGNED
nebo 0-255 pro UNSIGNED
. Jak poznamenaly další odpovědi, číslo v závorkách je pouze nápovědou pro šířku zobrazení.
Možná si ale budete chtít všimnout, že aplikace=moudré věci mohou vypadat jinak. Zde tinyint(1)
může mít zvláštní význam. Například Connector/J (Java konektor) zpracovává tinyint(1)
jako booleovskou hodnotu a místo vracení číselného výsledku do aplikace převádí hodnoty na true
a false
. to lze změnit pomocí tinyInt1isBit=false
parametr připojení.
Tinyint(1) může obsahovat čísla v rozsahu -128 až 127, protože datový typ je 8 bitů (1 byte) - tinyint bez znaménka samozřejmě může obsahovat hodnoty 0-255.
Tiše zkrátí hodnoty mimo rozsah:
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>
... pokud nezměníte sql_mode
nebo změňte konfiguraci serveru:
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>
Hodnota použitá v DDL pro datový typ (např.:tinyint(1)) je, jak jste tušili, šířka zobrazení. Je však volitelná a klienti ji nemusí používat. Standardní klient MySQL jej například nepoužívá.
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) – jaký je rozdíl?