Когда мне следует использовать UNSIGNED и SIGNED INT в MySQL? Что лучше использовать или это просто личное предпочтение? Потому что я видел, как его использовали вот так;
id INT(10) UNSIGNED NOT NULL AUTO_INCREMENT
и
id INT(11) NOT NULL AUTO_INCREMENT
Ответы:
UNSIGNED
хранит только положительные числа (или ноль). С другой стороны, знаковый может хранить отрицательные числа (т. Е. Может иметь отрицательный знак ).Вот таблица диапазонов значений, которые
INTEGER
может хранить каждый тип:Источник: http://dev.mysql.com/doc/refman/5.6/en/integer-types.html
UNSIGNED
варьируется от0
доn
, а со знаком - от примерно-n/2
доn/2
.В этом случае у вас есть
AUTO_INCREMENT
столбец идентификатора, поэтому у вас не будет негативов. Таким образом, используйтеUNSIGNED
. Если вы не используетеUNSIGNED
дляAUTO_INCREMENT
столбца, ваше максимально возможное значение будет вдвое меньше (а отрицательная половина диапазона значений останется неиспользованной).источник
UNSIGNED
это специфичная для MySQL функция, а не стандартная функция SQL. Это означает, что использованиеUNSIGNED
может усложнить будущую миграцию на другую СУБД или вызвать трудности при использовании программных библиотек, ориентированных на стандартный SQL, такой как SQLAlchemy. Я думаю, это должно быть частью ответа.Используйте
UNSIGNED
для неотрицательных целых чисел.источник
По сути
UNSIGNED
, вы даете себе вдвое больше места для целого числа, поскольку вы явно указываете, что вам не нужны отрицательные числа (обычно потому, что сохраняемые вами значения никогда не будут отрицательными).источник
Я не согласен с vipin cp .
Верно то, что первый бит используется для представления знака. Но 1 для отрицательных значений, а 0 для положительных значений. Более того, отрицательные значения кодируются по-разному (дополнение до двух). Пример с TINYINT:
источник
Для отрицательного целочисленного значения
SIGNED
используется, а для неотрицательного целочисленного значенияUNSIGNED
используется. Всегда предлагалось использоватьUNSIGNED
id в качестве ПЕРВИЧНОГО КЛЮЧА.источник
Одна вещь, которую я хотел бы добавить в a
signed int
, - этоdefault value in mysql
,1 bit
будет использоваться для представленияsign
.-1 for negative and 0 for positive.
Поэтому, если ваше приложение вставляет только положительное значение, лучше указать беззнаковый.источник
Если вы знаете, какие номера собираетесь хранить, вы можете выбрать соответствующий вариант. В этом случае у вас есть id, который никогда не может быть отрицательным. Таким образом, вы можете использовать unsigned int. Диапазон значений int со знаком: от -n / 2 до + n / 2 Диапазон значений int без знака: от 0 до n Таким образом, количество доступных положительных чисел в два раза больше. Выбирайте соответственно.
источник
Я думаю,
UNSIGNED
было бы лучшим вариантом сохранить что-то вродеtime_duration
(например:)resolved_call_time = resolved_time(DateTime)-creation_time(DateTime)
значения в формате минут, часов или секунд, которое определенно будет неотрицательным числом.источник