У меня две таблицы с bigint:
table1 id bigint(20) PK autoincrement name varchar(40), text table2 id bigint(20) PK autoincrement created datetime text_field id_table1_ref bigint(20)
После вставки данных в таблицу1 и попытки вставить table1.id в таблицу2.id_table1_ref, число отличается, то есть:
Номер 1552545662588 из таблицы1.t1 становится 1552545662, или, что еще хуже, отрицательным числом.
Я знаю, что это проблема с настройками, но я не могу понять, как это сделать. Я попытался настроить подписанные / неузнанные значения для полей, но это не сработает.
Это происходит на моем локальном компьютере UNIX, на сервере все работает нормально, по крайней мере пока.
Любая помощь приветствуется.
Вы должны преобразовать его в строку в SQL, прежде чем вводить ее в PHP. В PHP вы можете использовать GMP для обработки номера.
Документы MySQL по конвертации: http://dev.mysql.com/doc/refman/5.7/en/cast-functions.html#function_convert
Кроме того, PHP, по крайней мере, в некоторых 64-разрядных операционных системах (например, FreeBSD AMD64) использует 8-байтный int, проверяемый путем тестирования с помощью
echo 'Размер int is' .PHP_INT_SIZE;
Поэтому, если вы собираетесь работать только с 64-разрядной операционной системой, вам не нужно управлять BIGINT как строки в PHP.
Я решил эту проблему, перейдя на другую версию php, которая меняется с 64-битной версии php на 32-битную версию php. Это действительно работает для меня.