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 ZEROFILLopcji, 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, 01a 0001dla 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, ba cuż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).