Раздел вопрос-ответ В чём разница int(3) int(10) int(12) и так далее? mysql

В чём разница в mysql для полей объявленных как int(3) int(5) int(10) int(12) и так далее? Опытным путём определил, что для каждого из этих полей максимально возможное значение, которое можно вставить (для unsigned) является 4294967295. Если вставлять значение большее, то оно будет приведено к 4294967295.

 

share

2 ответа

int(3), int(5), int(10), int(11) в скобочках означает не максимальную длину поля в mysql, как это делается для типа varchar. А означает лишь длину вывода. Причём только тогда, когда у столбца задан аттрибут ZEROFILL.

Т.е. число в скобках никак не влияет на максимально возможное значение типа int.

Рассмотрим на примере. Вот как будут выводиться числа для поля INT(2) unsigned:

//INT(2) UNSIGNED:
1
2
..
98
99
..
9999
10000

Вот как будут выводиться числа для поля INT(2) unsigned zerofill:

//INT(2) UNSIGNED ZEROFILL:
01
02 
...
09
...
99
100
...
10000
//INT(4) UNSIGNED ZEROFILL:
0001
0002 
...
0009
...
0099
0100
...
9999
10000

Т.е. суть в том, что для ZEROFILL будут отображаться нули слева, формируя заданную в скобочках длину вывода. Если длина строкового представления числа меньше размера вывода (размера, указанного в скобках), то строковое представление числа будет дополнено нулями слева до требуемой длины.

Еще пару реальных sql-примеров с int и zerofill:

CREATE TABLE test_int (
    id1 INT UNSIGNED,
    id2 INT(2) UNSIGNED,
    id3 INT(10) UNSIGNED,
    id4 INT(2) UNSIGNED ZEROFILL,
    id5 INT(10) UNSIGNED ZEROFILL
);

mysql> show create table test_int;
CREATE TABLE `test_int` (
  `id1` int(10) unsigned DEFAULT NULL,
  `id2` int(2) unsigned DEFAULT NULL,
  `id3` int(10) unsigned DEFAULT NULL,
  `id4` int(2) unsigned zerofill DEFAULT NULL,
  `id5` int(10) unsigned zerofill DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8

INSERT INTO test_int VALUES
    (1, 1, 1, 1, 1),
    (333,333,333,333,333);

mysql> select * from test_int;
+------+------+------+------+------------+
| id1  | id2  | id3  | id4  | id5        |
+------+------+------+------+------------+
|    1 |    1 |    1 |   01 | 0000000001 |
|  333 |  333 |  333 |  333 | 0000000333 |
+------+------+------+------+------------+
2 rows in set (0,01 sec)

 

Добавить комментарий
    как минимум 5 символов

    INT(n) — Значение n в скобках влияет только на длину вывода. Причём только в случае, если задан аттрибут zerofill.

    На длину или размерность поля n никак не влияет.

    Примеры:

    • при INT(4) ZEROFILL 4 извлекается как 0004.
    • при INT(4) ZEROFILL 40001004 извлекается как 40001004.
    • при INT(4) величина 4 извлекается как 4.
    • при INT(4) величина 40001004 извлекается как 40001004.

    Поля mysql, объявленные как int(1) int(3) int(10) int(12) — занимают одинаковое количество байт. 4 байта. Поэтому нет смысла играться с этой цифрой. Лучше использовать другой тип поля, например tinyint.

    Размерности целочисленных полей в mysql
    Тип поля Размерность (в байтах) Максимальная длина Максимальная длина для беззнакового (UNSIGNED)
    SMALLINT 1 байт -128 до 127 0 до 255 
    TINYINT 2 байта -32768 до 32767 0 до 65535
    MEDIUMINT 3 байта -8388608 до 8388607 0 до 16777215
    INT 4 байта -2147483648 до 2147483647 0 до 4294967295
    BIGINT 8 байт -9223372036854775808 до 9223372036854775807 0 до 18446744073709551615

     

    Добавить комментарий
      как минимум 5 символов

      icon Вход в систему

      зарегистрироваться
      НОВЫЕ ПОЛЬЗОВАТЕЛИ