Типы в MySQL: BigInt (20) по сравнению с интервалом (20)

Я задавался вопросом что различие между BigInt, MediumInt, и Int ..., казалось бы очевидным, что они будут допускать большее число; однако, я могу сделать Int(20) или a BigInt(20) и это сделало бы, кажутся, что это не обязательно о размере.

Некоторое понимание было бы потрясающим, просто довольно любопытным. Я использовал MySQL некоторое время и пытался применить бизнес-потребности при выборе типов, но я никогда не понимал этот аспект.

201
задан Yousha Aleayoub 9 February 2018 в 01:06
поделиться

3 ответа

См. http://dev.mysql.com/doc/refman/8.0/en/numeric-types.html

  • INT является четырехбайтовым подписанным целое число.

  • BIGINT - восьмибайтовое целое число со знаком.

Каждый из них принимает не больше и не меньше значений, чем может быть сохранено в соответствующем количестве байтов. Это означает 2 32 значения в INT и 2 64 значений в BIGINT .

Число 20 в INT (20) и BIGINT (20) почти ничего не означает. Это подсказка по ширине дисплея.Это не имеет ничего общего ни с хранилищем, ни с диапазоном значений, которые принимает столбец.

Фактически, это влияет только на параметр ZEROFILL :

CREATE TABLE foo ( bar INT(20) ZEROFILL );
INSERT INTO foo (bar) VALUES (1234);
SELECT bar from foo;

+----------------------+
| bar                  |
+----------------------+
| 00000000000000001234 |
+----------------------+

Пользователи MySQL часто заблуждаются, когда видят INT (20) и предполагают, что это ограничение размера, что-то аналогично CHAR (20) . Это не тот случай.

427
ответ дан 23 November 2019 в 05:02
поделиться

Цитата :

Спецификация «BIGINT (20)» не является ограничением количества цифр. Это просто означает, что при отображении данных, если в них используется менее 20 цифр, они будут дополнены нулями слева. 2 ^ 64 является жестким пределом для типа BIGINT и имеет 20 цифр, поэтому BIGINT (20) просто означает, что все, что меньше 10 ^ 20, будет заполнено слева пробелами на дисплее.

14
ответ дан 23 November 2019 в 05:02
поделиться

Число в скобках в объявлении типа составляет ширину отображения , что не связано с диапазоном значений, которые могут храниться в типе данных. Тот факт, что вы можете объявить Int (20) , не означает, что вы можете хранить в нем значения до 10 ^ 20:

[...] Эта дополнительная ширина отображения может использоваться приложениями для отображения целочисленных значений, ширина которых меньше ширины, указанной для столбца, путем заполнения их пробелами слева. ...

Ширина отображения не ограничивает ни диапазон значений, которые могут быть сохранены в столбце, ни количество цифр, отображаемых для значений, ширина которых превышает указанную для столбца. Например, столбец, указанный как SMALLINT (3), имеет обычный диапазон SMALLINT от -32768 до 32767, а значения за пределами диапазона, разрешенного тремя символами, отображаются с использованием более трех символов.

Список максимальных и минимальных значений, которые могут храниться в каждом типе данных MySQL, см. здесь .

38
ответ дан 23 November 2019 в 05:02
поделиться
Другие вопросы по тегам:

Похожие вопросы: