sql >> Databáze >  >> RDS >> Mysql

Co znamená parametr TINYINT(parametr)?

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?



  1. Připojit Docker Compose ECONNREFUSED 172.18.0.4:3306

  2. SELECT s proměnnými dotazu, které nepoužívají INDEXy

  3. Pole – Vloží hodnoty pole do tabulky mysql

  4. Vložte pomocí PreparedStatement. Jak mohu automaticky zvýšit ID?