Когда следует использовать UNSIGNED и SIGNED INT в MySQL?

Когда я должен использовать UNSIGNED и SIGNED INT в MySQL? Что лучше использовать, или это просто личное предпочтение? Потому что я видел, как он использовался так:

id INT(10) UNSIGNED NOT NULL AUTO_INCREMENT

и

id INT(11) NOT NULL AUTO_INCREMENT

Ответ 1

UNSIGNED хранит только положительные числа (или ноль). С другой стороны, подписанный может хранить отрицательные числа (т.е. может иметь отрицательный знак).

Вот таблица диапазонов значений, которые может хранить каждый тип INTEGER:

MySQL INTEGER types and lengths
Source: 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, ваше максимально возможное значение будет вдвое меньше (а отрицательная половина диапазона значений останется неиспользованной).

Ответ 2

Используйте UNSIGNED для неотрицательных целых чисел.

Ответ 3

В основном с UNSIGNED вы даете себе вдвое больше места для целого числа, поскольку вы явно указываете, что вам не нужны отрицательные числа (обычно потому, что значения, которые вы сохраняете, никогда не будут отрицательными).

Ответ 4

Я не согласен с vipin cp.

Истина заключается в том, что первый бит используется для представления знака. Но 1 для отрицательных и 0 для положительных значений. Более отрицательные значения кодируются по-разному (два дополнения). Пример с TINYINT:

The sign bit
|
1000 0000b = -128d  
...  
1111 1101b = -3d  
1111 1110b = -2d  
1111 1111b = -1d  

0000 0000b = 0d  
0000 0001b = 1d  
0000 0010b = 2d  
...  
0111 1111b = 127d  

Ответ 5

Я думаю, что UNSIGNED будет лучшим вариантом для хранения чего-то вроде значения time_duration (например, resolved_call_time = resolved_time(DateTime)-creation_time(DateTime)) в формате минут, часов или секунд, что определенно будет неотрицательным числом.

Ответ 6

Одна вещь, которую я хотел бы добавить В signed int, который является default value in mysql, 1 bit будет использоваться для представления sign. -1 for negative and 0 for positive.  Поэтому, если ваше приложение вставляет только положительное значение, лучше указать unsigned.

Ответ 7

Если вам известен тип номеров, которые вы собираетесь хранить, вы можете выбрать соответственно. В этом случае у вас есть "id", который никогда не может быть отрицательным. Таким образом, вы можете использовать unsigned int. Диапазон подписанных int: -n/2 до + n/2 Диапазон значений unsigned int: от 0 до n Таким образом, у вас в два раза больше числа положительных чисел. Выберите соответственно.

Ответ 8

Для отрицательного целого значения используется SIGNED, а для неотрицательного целого значения используется UNSIGNED. Всегда предлагалось использовать UNSIGNED для id как ПЕРВИЧНЫЙ КЛЮЧ.