Подтвердить что ты не робот

Разница между типами "int" и "int (3)" в моем sql

Просто интересно, почему диапазон задан с моими типами данных sql. Я определяю таблицу с именем поля "id", а тип данных - "int (2)". Я вставил значение в поле "id" как "123456". Это принято и сохраняется. Итак, зачем использовать диапазон.

Спасибо заранее.

4b9b3361

Ответ 1

Для INT и других числовых типов, атрибут которых определяет только ширину отображения.

См. Атрибуты числового типа в документации по MySQL:

MySQL поддерживает расширение для опционально с указанием дисплея ширина целочисленных типов данных в круглые скобки после ключевого слова base для типа. Например, INT (4) указывает INT с шириной отображения из четырех цифр. Этот дополнительный дисплей ширина может использоваться приложениями для отображать целочисленные значения, имеющие ширину меньше ширины, указанной для столбец слева, дополняя их пространства. (То есть эта ширина равна присутствовать в метаданных, возвращенных с помощью наборы результатов. Используется ли он или нет зависит от приложения.)

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

Ответ 2

Необязательный спецификатор ширины экрана (для целых типов данных) применим только при использовании zerofill и не имеет ничего общего с внутренним размером (в байтах) целочисленного типа данных.

http://dev.mysql.com/doc/refman/5.0/en/numeric-types.html

drop table if exists foo;
create table foo
(
bar smallint(4) unsigned zerofill not null default 0
)engine=innodb;

insert into foo (bar) values (781),(727);

select * from foo;
+-----------+
| bar       |
+-----------+
|      0781 |
|      0727 |
+-----------+

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

create table users
(
user_id int not null auto_increment primary key, -- -2147483648 to 2147483647
...
)engine=innodb;

против.

create table users
(
user_id int unsigned not null auto_increment primary key, -- 0 to 4294967295
...
)engine=innodb;

Итак, что это должно быть - unsigned или signed?

Надеюсь, что это поможет:)

Ответ 3

(2) не определяет размер целого. Это просто количество цифр для отображения в некоторых инструментах - я не уверен в деталях. Размер целого определяется как INT, TINYINT, SMALLINT, MEDIUMINT или BIGINT.

Ответ 4

Насколько я знаю, когда вы определяете INT(2) (где максимальное значение равно 4), вы выделяете в памяти 2 бита, но если вы вставляете значение, которое больше, то 4, MySQL будет запрашивать больше памяти из система.

Итак, INT(2) означает выделение не менее 2 бит для сохранения этого значения, если значение больше, то вы указали (INT(2)), СУБД снова запросит память для запроса этой памяти. Это не подходит для удобства производительности дважды запрашивать память, поэтому лучше выделить для столбца больше места.