Когда я должен использовать UNSIGNED и SIGNED INT в MySQL? Что лучше использовать, или это просто личное предпочтение? Потому что я видел, как он использовался так:
id INT(10) UNSIGNED NOT NULL AUTO_INCREMENT
и
id INT(11) NOT NULL AUTO_INCREMENT
Когда я должен использовать UNSIGNED и SIGNED INT в MySQL? Что лучше использовать, или это просто личное предпочтение? Потому что я видел, как он использовался так:
id INT(10) UNSIGNED NOT NULL AUTO_INCREMENT
и
id INT(11) NOT NULL AUTO_INCREMENT
UNSIGNED хранит только положительные числа (или ноль). С другой стороны, подписанный может хранить отрицательные числа (т.е. может иметь отрицательный знак).
Вот таблица диапазонов значений, которые может хранить каждый тип INTEGER:

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, ваше максимально возможное значение будет вдвое меньше (а отрицательная половина диапазона значений останется неиспользованной).
Используйте UNSIGNED для неотрицательных целых чисел.
В основном с UNSIGNED вы даете себе вдвое больше места для целого числа, поскольку вы явно указываете, что вам не нужны отрицательные числа (обычно потому, что значения, которые вы сохраняете, никогда не будут отрицательными).
Я не согласен с 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  
Я думаю, что UNSIGNED будет лучшим вариантом для хранения чего-то вроде значения time_duration (например, resolved_call_time = resolved_time(DateTime)-creation_time(DateTime)) в формате минут, часов или секунд, что определенно будет неотрицательным числом.
Одна вещь, которую я хотел бы добавить
В signed int, который является default value in mysql, 1 bit будет использоваться для представления sign. -1 for negative and 0 for positive.
 Поэтому, если ваше приложение вставляет только положительное значение, лучше указать unsigned.
Если вам известен тип номеров, которые вы собираетесь хранить, вы можете выбрать соответственно. В этом случае у вас есть "id", который никогда не может быть отрицательным. Таким образом, вы можете использовать unsigned int. Диапазон подписанных int: -n/2 до + n/2 Диапазон значений unsigned int: от 0 до n Таким образом, у вас в два раза больше числа положительных чисел. Выберите соответственно.
Для отрицательного целого значения используется SIGNED, а для неотрицательного целого значения используется UNSIGNED. Всегда предлагалось использовать UNSIGNED для id как ПЕРВИЧНЫЙ КЛЮЧ.