Прежде чем отмечать ответ как дубликат, я хотел бы сказать, что я был в этом Q & A: Неправильное целое число (2147483647) вставляется в MySQL? и мои проблемы - это наоборот. MySQL неверно возвращает целое число. Как и раньше, я работаю с Steam API
и у них действительно очень длинные IDs
.
Ниже приведены следующие шаги, которые я выполнил:
Dota2_items
(103582791433341052
) и вставьте в DB
.103582791433341060
GiveawayTasks::where('id', 1)->first()
который переводит из Laravel "select * from giveaway_task where id = 1"
Обратите внимание на 8 значений разницы между двумя идентификаторами. Похоже, что база данных добавила 8 значений к исходному идентификатору.
Чтобы решить эту проблему, я сделал PHP_MAX_INT
который возвращает 9223372036854776000
. Именно то, что я ожидал от 64 bit machine
. Теперь я попытался вычесть PHP_MAX_INT
и номер из базы данных, чтобы узнать, может ли int больше, чем PHP_MAX_INT
:
PHP_MAX_INT - <Number from the database>
→ 9223372036854776000 - 103582791433341052 = 9119789245421434948
что приводит меня к выводу, что я не пытаюсь хранить больше одной переменной, чем может обрабатывать PHP_MAX_INT
.
Я не уверен, что происходит здесь, так как это выходит за рамки моего опыта. Любая помощь будет принята с благодарностью.
Я использую структуру Laravel, но я не думаю, что это имеет отношение к делу.
Вместо использования Integers
вместо этого используйте String
для ваших ids
. Вы получаете эту ошибку, потому что mysql
имеет максимальное целочисленное значение 2147483647 for 32-bit
по сравнению с вашим входом 103582791433341052
. Это может решить проблему, если вы рассматриваете эти integers
как String
.
double
значение.
Вам нужно использовать BigInt, а не Int для типа столбца "id". Подробнее см. В этой таблице.
Изменение: Строки могут быть лучшей альтернативой, как предложено в комментариях ниже.
double
которое не может хранить последние цифры вашего большого значения и округляется в большую сторону. См., Например, MySQL Refman 5.7 , в котором есть аналогичный пример.