Проблемы с типом данных int (11) в MYSQL - PullRequest
1 голос
/ 13 августа 2011

У меня есть таблица в MYSQL с идентификатором первичного ключа int (11) (с автоинкрементом). Теперь у меня есть программа, которая читает текстовый файл и вводит значение в столбце id. Поэтому моя таблица должна содержать:

id
897413
791783


Но что происходит, я не могу найти большие цифры в своей таблице. Это из-за максимального значения, которое может содержать int (11)? Увеличение int (11) до int (20) все еще сталкивается с той же проблемой. Я не могу изменить тип данных на большой int, так как уже реализовал много кода.

EDIT: Я попытался вставить одну запись с идентификатором 523826, и она была сохранена в БД как 450258. Почему так?

Ответы [ 2 ]

12 голосов
/ 13 августа 2011

Определение из mysql manual для типа данных int:

Целое число нормального размера. Диапазон со знаком от -2147483648 до 2147483647. Диапазон без знака от 0 до 4294967295.

Тип int всегда 4 байта (32 бита). 11 в int(11) - это просто «ширина экрана», которая имеет значение только для UNSIGNED ZEROFILL столбцов. Подробнее о этом блоге .

3 голосов
/ 13 августа 2011

INT в MySQL составляет 32 бита.INT (11), вероятно, означает, что у вас есть подписанный INT, который для идентификатора бесполезен.Изменение его на неподписанный INT автоматически удваивает количество доступных идентификаторов (поскольку никто не использует отрицательный идентификатор).Хотя 11 «кажется» больше, это потому, что он учитывает «длину» числа, если это максимальное отрицательное число (-2147483648) длиной 11 символов.

BIGINT позволит вам перейти на64 бита, со знаком или без знака.Опять же, unsigned позволит вам вдвое больше идентификаторов (> 0).

Как уже упоминал Эндрю, если ваш PHP не поддерживает 64-битные целые числа, вы не сможете их легко использовать.1006 * Надеюсь, это поможет.

...