Давайте рассмотрим TINYINT. W3Schools говорит, что его диапазон со знаком составляет от -128 до 127, а диапазон без знака от 0 до 255.
1) Почему он говорит, что его диапазон составляет от -128 до 127, и почему нет, что его диапазон составляет от -128 до 255.
2) Означают ли эти диапазоны, что я не могу принять значение -129 или 256? (Допустим, я заполняю форму, где у меня есть текстовое поле)
Диапазон подписанных и неподписанных одинаков, все дело в оптимизации. без знака только для верхней границы означает, что это не допускает отрицательное число. Поэтому, когда вы знаете, что вам нужен только положительный номер, всегда используйте без знака.
Проверь это Вот
Значение tinyint не от -128 до 255, поэтому они этого не говорят.
При создании таблицы она либо подписана, либо не подписана. Если вы не укажете, то по умолчанию будет подписано от -128 до 127. Если вы укажете unsigned при создании таблицы, ее значение будет от 0 до 255.
CREATE TABLE `example_table` (
`example_col` tinyint(3) unsigned NOT NULL
);
Второй ответ — «Да», вы не можете использовать значение от -129 или 256 в tinyint. Проверь это ссылка на сайт чтобы получить представление о верхней и нижней границе каждого.
TINYINT
представляется через 8 бит (1 байт). Базовые знания теории информации говорят, что только 256 различных значений (256 = 2 ^ 8) может быть представлено 8 битами.
8 бит «tinyint» являются интерпретируется MySQL одним из двух способов:
TINYINT UNSIGNED
где 256 значений интерпретированы как 0..255, или
TINYINT SIGNED
(псевдоним TINYINT
, поскольку SIGNED
по умолчанию), где интерпретация имеет диапазон -128..127.
Когда верхний бит 0
8 бит представляют 0.127 одинаково между SIGNED
а также UNSIGNED
, Но когда верхний бит 1
8 бит представляют отрицательные числа или большие положительные числа.
Если бы вы хотели, вы могли бы интерпретировать 256 значений означают «красный», «желтый», «зеленый» и т. д. Это именно то, что происходит с другим типом данных:
ENUM('red', 'yellow', 'green')
Другая интерпретация из 8-битных байтов дает вам символы Ascii. Увидеть CHAR
, VARCHAR
, TEXT
, так далее.
поскольку TINYINT
должно быть либо SIGNED
или же UNSIGNED
, вы не могу иметь TINYINT
столбец с обоими этими значениями: -111 и 222 (в разных строках). Если вам это нужно, используйте SMALLINT SIGNED
, (Это приводит к обсуждению 16-битных представлений числа.)