Когда использовать различные числовые типы данных - TINYINT / SMALLINT / MEDIUMINT / INT / BIGINT - MySQL

Я прочитал приведенные здесь ответы: В чем разница между tinyint, smallint, mediumint, bigint и int в MySQL?, так что теперь я знаю, как они хранят данные, но я все еще не уверен, как настроить мою базу данных. Например, если я хочу, чтобы поле было либо 0, либо 1 (вроде двоичного, 0 = выключено, 1 = включено), могу ли я использовать TINYINT с длиной 1?

Мой главный вопрос: что определяет настройка LENGTH? Поскольку каждый тип данных NUMERIC уже имеет свой собственный связанный размер данных.

Кроме того, в чем разница между ПОДПИСАННЫМ и НЕПОДПИСАННЫМ, и почему я должен выбирать одно вместо другого?


person Keir Simmons    schedule 27.07.2012    source источник
comment
Имеет ли значение длина / размер поля, если ZEROFILL не использовался?   -  person Keir Simmons    schedule 27.07.2012
comment
Я только что понял, что храню метки времени в INT(99) SIGNED, который может содержать только значения до 2147483647, но метки времени намного выше, чем это - за исключением того, что мои метки времени не были усечены. Это почему?   -  person Keir Simmons    schedule 27.07.2012


Ответы (3)


Разница между ПОДПИСАННЫМ и НЕПОДПИСАННЫМ заключается в том, что НЕ ПОДПИСАНО вы можете хранить только положительные числа.

Например: о значениях INT (Normal INTEGER)

Диапазон со знаком - от -2147483648 до 2147483647. Диапазон без знака - от 0 до 4294967295. Если вы используете значение PK auto_increment, тогда вам следует использовать UNSIGNED в этом случае.

person Mahesh Patil    schedule 27.07.2012

Для двоичных полей используйте BIT.

длина чисел определяет точность до и после запятой. См. здесь

person juergen d    schedule 27.07.2012
comment
Могу ли я использовать BIT для значений, которые могут быть -1,0 или 1? или это конкретно на 0,1? Если я храню денежные данные (но без десятичных знаков, например, 1, 2, 3 доллара и т. Д., Как мне их сохранить?) - person Keir Simmons; 27.07.2012
comment
BIT(1) может хранить только 1 и 0. Вы можете прочитать все свои вопросы здесь. Кстати, SIGNED предназначен для значений, которые могут быть отрицательными, а UNSIGNED - для значений, которые никогда не могут быть отрицательными. - person juergen d; 27.07.2012
comment
Есть ли причина использовать BIT вместо BOOL? - person Keir Simmons; 27.07.2012
comment
Нет, вы также можете использовать bool. Для true-false значений может быть даже лучше. - person juergen d; 27.07.2012

Целочисленная переменная имеет 32 бита для хранения целочисленного значения. В целых числах со знаком первый бит зарезервирован для хранения положительного или отрицательного знака. Таким образом, целое число со знаком может использовать только 31 бит для хранения значения и, следовательно, его диапазон будет от –2 147 483 648 до +2 147 483 647. Предположим, ваша программа должна хранить только положительное целое число больше +2 147 483 647. Вам нужно учитывать длинное целое число, которое займет 8 бит, что приведет к неэффективной трате памяти. Вместо этого вы можете использовать целое число без знака. В целых числах без знака для знака не зарезервировано ни одного бита, поэтому теперь у вас есть 32 бита для хранения значения. Единственное ограничение, связанное с целым числом без знака, состоит в том, что вы не можете использовать его для хранения отрицательных значений. Диапазон 32-битного целого числа без знака составляет от 0 до 4 294 967 295. Надеюсь, он проясняет вашу концепцию целого числа со знаком и без знака.

person devkantmohan    schedule 15.01.2015