Znałem wartość logiczną w mysql jako tinyint (1)
.
Dzisiaj widzę tabelę ze zdefiniowaną liczbą całkowitą tinyint(2)
, a także innymi int(4)
, int(6)
...
Co oznacza rozmiar w polu typu integer i tinyint?
Znałem wartość logiczną w mysql jako tinyint (1)
.
Dzisiaj widzę tabelę ze zdefiniowaną liczbą całkowitą tinyint(2)
, a także innymi int(4)
, int(6)
...
Co oznacza rozmiar w polu typu integer i tinyint?
Odpowiedzi:
Oznacza szerokość wyświetlacza
Bez względu na to, czy używasz tinyint (1), czy tinyint (2), nie ma to znaczenia.
Zawsze używam tinyint (1) i int (11), korzystałem z kilku klientów mysql (navicat, sequel pro).
W ogóle nic nie znaczy! Przeprowadziłem test, wszystkie powyższe klienty, a nawet klient wiersza poleceń wydaje się to ignorować.
Ale szerokość wyświetlania jest najważniejsza, jeśli używasz ZEROFILL
opcji, na przykład twoja tabela ma następujące 2 kolumny:
Tinyint (2) ZEROFILL
B tinyint (4) zerofill
obie kolumny mają wartość 1, dane wyjściowe dla kolumny A byłyby, 01
a 0001
dla B , jak widać na zrzucie ekranu poniżej :)
(m)
Wskazuje szerokość wyświetlania kolumny; aplikacje takie jak klient MySQL wykorzystują to podczas wyświetlania wyników zapytania.
Na przykład:
| v | a | b | c |
+-----+-----+-----+-----+
| 1 | 1 | 1 | 1 |
| 10 | 10 | 10 | 10 |
| 100 | 100 | 100 | 100 |
Tutaj a
, b
a c
używasz TINYINT(1)
, TINYINT(2)
i TINYINT(3)
odpowiednio. Jak widać, wypełnia wartości po lewej stronie, używając szerokości wyświetlania.
Należy zauważyć, że nie wpływa to na akceptowany zakres wartości dla tego konkretnego typu, tzn. TINYINT(1)
Nadal akceptuje [-128 .. 127]
.
mysql> CREATE TABLE tin3(id int PRIMARY KEY,val TINYINT(10) ZEROFILL);
Query OK, 0 rows affected (0.04 sec)
mysql> INSERT INTO tin3 VALUES(1,12),(2,7),(4,101);
Query OK, 3 rows affected (0.02 sec)
Records: 3 Duplicates: 0 Warnings: 0
mysql> SELECT * FROM tin3;
+----+------------+
| id | val |
+----+------------+
| 1 | 0000000012 |
| 2 | 0000000007 |
| 4 | 0000000101 |
+----+------------+
3 rows in set (0.00 sec)
mysql>
mysql> SELECT LENGTH(val) FROM tin3 WHERE id=2;
+-------------+
| LENGTH(val) |
+-------------+
| 10 |
+-------------+
1 row in set (0.01 sec)
mysql> SELECT val+1 FROM tin3 WHERE id=2;
+-------+
| val+1 |
+-------+
| 8 |
+-------+
1 row in set (0.00 sec)
Informacje o INT, TINYINT ... Są to różne typy danych, INT to liczba 4-bajtowa, TINYINT to liczba 1-bajtowa. Więcej informacji tutaj - INTEGER, INT, SMALLINT, TINYINT, MEDIUMINT, BIGINT .
Składnia typu danych TINYINT to TINYINT (M), gdzie M oznacza maksymalną szerokość wyświetlania (używaną tylko, jeśli obsługuje go klient MySQL).