mySQL 5.0.45 LAST_INSERT_ID () и значения больше, чем int со знаком - PullRequest
4 голосов
/ 05 августа 2010

Я пытаюсь использовать LAST_INSERT_ID для индекса с автоматическим приращением, который переместился после значения int со знаком 2147483647. Этот столбец является целым без знака.Однако LAST_INSERT_ID () возвращает недопустимое отрицательное значение.Исследуя это, я нашел пару комментариев, указывающих, что это природа этой функции.Но я не могу найти это официально задокументировано.Есть несколько сообщений об ошибках, появившихся несколько лет назад.

Так что мне нужно знать, является ли это на самом деле известной ошибкой и / или есть ли что-то, что я могу сделать с этим.Нужно ли обновлять mySQL до более новой версии?

Ответы [ 2 ]

0 голосов
/ 30 ноября 2010

Я предполагаю, что вы используете PHP из комментариев к вопросу. (в настоящее время не помечено как "php"). Я просто добавлю свои 2 цента здесь

Я пытаюсь использовать LAST_INSERT_ID для индекса с автоинкрементом, который переместился за пределы значения int со знаком 2147483647. Этот столбец является целым без знака. Однако LAST_INSERT_ID () возвращает недопустимое отрицательное значение. Исследуя это, я нашел пару комментариев, указывающих, что это природа этой функции. Но я не могу найти это официально задокументировано. Есть несколько сообщений об ошибках, появившихся несколько лет назад.

mySQL Функция LAST_INSERT_ID вернет ID из последней INSERT в столбце AUTO_INCREMENT (для текущего соединения), так что если ваш столбец - INTEGER UNSIGNED, как вы сказали, он может вернуть значения больше 2147483647 . Это правильное поведение.

Так что мне нужно знать, является ли это на самом деле известной ошибкой и / или есть ли что-то, что я могу с этим сделать. Нужно ли обновлять mySQL до более новой версии?

Тип данных mySQL имеет мало общего с представлением, которое вы выбрали для использования на PHP , поэтому проблема не в сервере mySQL . Если ваша PHP установка не может обрабатывать числа, такие БОЛЬШИЕ, тогда вы можете рассматривать это как string (Shadow Radiance сказал).

0 голосов
/ 17 ноября 2010

Я не уверен на 100% в этом, но, поскольку вам просто нужен идентификатор, а не какие-либо математические операции с ним, не могли бы вы обработать его как строку и сделать так, чтобы ваш оператор select преобразовал число в строку?

...