Когда мы используем длину аргумента с числовыми типами данных, насколько я знаю, это определяет ширину экрана.
Я попробовал следующее:
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)
Прежде всего, tinyint - это 1-байтовое значение. Так в чем смысл tinyint(4)
? Там не может быть 4 цифры.
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)
Я вижу, что в tinyint я сохранил 10 и 101, и я мог получить эти значения, несмотря на то, что он определен как tinyint (1).
Разве я не вижу 1 для var1
? Т.е. всего 1 отображаемая цифра?
Ответы:
Данные-мудрый,
tinyint(1)
,tinyint(2)
, иtinyint(3)
т.д., все точно так же. Все они находятся в диапазоне от -128 до 127 дляSIGNED
или от 0 до 255 дляUNSIGNED
. Как отмечалось в других ответах, число в скобках - это просто подсказка ширины дисплея.Вы можете заметить, однако, что приложения = мудрые вещи могут выглядеть иначе. Здесь
tinyint(1)
может иметь особое значение. Например, Connector / J (Java-коннектор) обрабатываетсяtinyint(1)
как логическое значение, и вместо возврата числового результата в приложение он преобразует значения вtrue
иfalse
. это можно изменить с помощьюtinyInt1isBit=false
параметра подключения.источник
Tinyint (1) может содержать числа в диапазоне от -128 до 127, поскольку тип данных составляет 8 бит (1 байт) - очевидно, что unsigned tinyint может содержать значения 0-255.
Он будет молча обрезать вне диапазона значений:
... если вы не измените
sql_mode
или не измените конфигурацию сервера:Значение, используемое в DDL для типа данных (например: tinyint (1)), как вы и предполагали, представляет собой ширину экрана. Тем не менее, это необязательно, и клиенты не должны использовать его. Например, стандартный клиент MySQL не использует его.
источник