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


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

id INT(10) UNSIGNED NOT NULL AUTO_INCREMENT

и

id INT(11) NOT NULL AUTO_INCREMENT
7 64

7 ответов:

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

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

MySQL INTEGER types and lengths
источник:http://dev.mysql.com/doc/refman/5.6/en/integer-types.html

UNSIGNED составляет от 0 до n, находясь в диапазоне от о -n/2 до n/2.

в этом случае, у вас есть AUTO_INCREMENT столбец ID, поэтому у вас не будет негативов. Таким образом, используйте 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  

одну вещь я хотел бы добавить В 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 Диапазон беззнаковых int: от 0 до n Таким образом, у вас есть в два раза больше положительных чисел. Выбирайте соответственно.

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