2147483647 = 2
31 - 1
Это максимальное 32-битное знаковое целое. В доке на Telegram API читаем:
chat_id - This number may have more than 32 significant bits and some programming languages may have difficulty/silent defects in interpreting it. But it has at most 52 significant bits, so a 64-bit integer or double-precision float type are safe for storing this identifier.
То есть, для хранения chat_id надо использовать 64-битные значения. Для MySQL, например, это тип BIGINT.
И общий совет - не бойтесь отлаживать свои программы. Встретили что-то непонятное - обмажьте это место логами, отладочными выводами, информацией о предупреждениях и ошибках. Выводите всё, что может иметь отношение к проблеме. Потом анализируйте, локализуйте точное место проблемы. В данном случае логи бы показали, что из API приходит одно значение chat_id, а в базе сохраняется другое. А ещё, возможно, вы бы увидели сообщение от базы данных, что при записи значения оно было обрезано (как минимум MySQL такое сообщение выдаёт).