У меня есть таблица писем.
Последняя запись для идентификатора автоматического увеличения равна 3780, что является законной записью. Любая новая запись, которую я сейчас вставляю, вставлена прямо там.
Однако в моих журналах у меня есть случайные:
Query FAIL: INSERT INTO mail.messages (timestamp_queue) VALUES (:time); Array ( [0] => 23000 [1] => 1062 [2] => Duplicate entry '4294967295' for key 1 )
Так или иначе, автоинкремент подскочил до INT max 4294967295
Почему на зеленой земле бога это подскочит так высоко? У меня нет вложений с полем id.
Статус show для этой таблицы, таблица Auto_increment теперь читает: 4294967296
Как могло произойти что-то подобное? Я понимаю, что поле id должно быть большим int, но беспокойство, которое у меня есть, это то, что как-то эта вещь подпрыгивает.
мистифицировать
Изменить: обновить
mysql версия 5.0.45 красная шляпа исправлена
Поскольку я установил id в BIGINT, последние несколько идентификаторов выглядят так:
3777 3778 3779 3780 4294967295 4294967296 4294967297 4294967298 4294967299 4294967300
Как вы можете видеть, они инкрементальны, без пробелов (пока). Совершенно странно.
У меня была такая же проблема с тем же номером. Моя проблема заключалась в том, что у меня было поле в int(10)
когда я сменил его на bigint(20)
он решил мою проблему.
Если у других возникает эта проблема. Сначала проверьте свой размер поля. 🙂
Мне все еще не совсем ясно, что здесь произошло, но я думал, что буду следить.
В моем движке persistence у меня был один тип объекта с идентификатором auto-increment и подкласс с идентификатором GUID.
Очевидно, что эти два несовместимы. У меня есть причина, чтобы преобразовать объект в его родительский элемент, а затем сохранить его (в основном подкласс представляет собой текстовый TEMPLATE, который имеет дополнительные функции, но когда я хочу на самом деле ОТПРАВИТЬ электронную почту, я конвертирую его в родительский объект и сохраняю его регулярная очередь исходящей почты). Глупо, я не понимал, что форматы id различны. Это привело к попытке вставить запись с длиной длиной 36 символов в int. Строка разрешена в «0» в подготовленном операторе и по какой-либо причине это приводит к тому, что система автоматического инкремента имеет значение WIG OUT и максимальное значение поля INT auto increment id в исходной таблице.
Короче говоря, хорошо, что я держал журналы.
мистифицировать
по phpmyadmin просто вы можете изменить последний идентификатор с вкладкой операций этой таблицы
Это на самом деле просто со мной тоже (все еще не знаю почему). Познай, что я сделал:
ALTER TABLE `{table name here}` AUTO_INCREMENT = {your number here}; FLUSH TABLE `{table name here}`;
и, похоже, это исправлено. Сначала я попробовал просто установить значение автоматического прироста, но он вернулся к 4294967295. Опять же, не знаю, почему сработало значение приращения и промывка (я не парень базы данных), но я решил, что разместил бы это здесь, как это может помочь другим.
Просто измените его на BIGINT, и вы можете создать «некоторые» дополнительные новые записи. Пару сто миллиардов …;)
Это случилось со мной. Проблема глупа.
Если он получает character string
он преобразует ее в 0
и если integer, as in my case, where i was trying to insert a mobile no (in india it's 10 digits and starts with 9 like
9123456789 ) into a
столбец типа int.
Однако предел для signed int
равен 2147483647
.
Я попытался преобразовать его в unsigned
, но все же ограничение – 4294967295
. При этом ошибка «4294967295» что-то, но когда я преобразовал ее в bigint
, у которой есть предел 9223372036854775807
(что больше для 10-значного мобильного нет), он начал его принимать.
Ради мобильных я не конвертировал его в unsigned
который увеличил свой предел до 18446744073709551615
.