Kiedy używamy długości argumentu z numerycznymi typami danych, o ile wiem, określa szerokość wyświetlania.
Próbowałem następujące:
mysql> create table boolean_test (var1 boolean, var2 tinyint);
Query OK, 0 rows affected (0.10 sec)
mysql> show create table boolean_test;
+--------------+-------------------------
| Table | Create Table
+--------------+-------------------------
| boolean_test | CREATE TABLE `boolean_test` (
`var1` tinyint(1) DEFAULT NULL,
`var2` tinyint(4) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1 |
+--------------+---------------------------
1 row in set (0.00 sec)
Przede wszystkim tinyint ma wartość 1-bajtową. Jakie jest więc znaczenie tinyint(4)
? Nie mogą być 4 cyfry.
mysql> insert into boolean_test values(101,112);
Query OK, 1 row affected (0.03 sec)
mysql> select * from boolean_test;
+------+------+
| var1 | var2 |
+------+------+
| 10 | 112 |
| 101 | 112 |
+------+------+
2 rows in set (0.00 sec)
Widzę, że w tinyint zapisałem 10 i 101 i mogłem odzyskać te wartości, mimo że jest to zdefiniowane jako tinyint (1).
Czy nie powinienem zobaczyć 1 var1
? Czyli 1 wyświetla cyfry?
Odpowiedzi:
Dane mądry,
tinyint(1)
,tinyint(2)
,tinyint(3)
itd. Są dokładnie takie same. Wszystkie są w zakresie od -128 do 127 dlaSIGNED
lub 0-255 dlaUNSIGNED
. Jak zauważyły inne odpowiedzi, liczba w nawiasach jest jedynie wskazówką dotyczącą szerokości wyświetlacza.Warto jednak zauważyć, że aplikacja = mądre rzeczy mogą wyglądać inaczej. Tutaj
tinyint(1)
może mieć szczególne znaczenie. Na przykład Connector / J (złącze Java) traktujetinyint(1)
jako wartość logiczną i zamiast zwracać wynik liczbowy do aplikacji, konwertuje wartości natrue
ifalse
. można to zmienić za pomocątinyInt1isBit=false
parametru połączenia.źródło
Malutki (1) może przechowywać liczby w zakresie od -128 do 127, ponieważ typ danych to 8 bitów (1 bajt) - oczywiście niepodpisany malutki może przechowywać wartości 0-255.
Po cichu obcina wartości poza zakresem:
... chyba że zmienisz
sql_mode
lub zmienisz konfigurację serwera:Wartość użyta w DDL dla typu danych (np .: tinyint (1)) to, jak można się spodziewać, szerokość wyświetlania. Jest to jednak opcjonalne i klienci nie muszą go używać. Na przykład standardowy klient MySQL go nie używa.
źródło