У меня есть строка в PHP (исходит из некоторого источника данных), которая представляет собой форматированное 32-битное целое число без знака. Мне нужно сохранить его в базе данных MySQL в качестве подписанного 32-разрядного целого числа, так что позже я могу получить его из PHP и использовать его в качестве (возможно, отрицательной) целочисленной константы со знаком (поскольку PHP не имеет целых без знака).Как отличить 32-битное целое от без знака к подписанному в MySQL или PHP?
Итак, мне нужен метод преобразования, как для PHP, так и для MySQL. Он не должен быть зависимым от платформы (без проблем с endian/32/64-bit).
Я знаю, как преобразовать целое число в беззнаковое с использованием MySQL:
select CAST((-1062726980 & 0xFFFFFFFF) AS UNSIGNED INTEGER);
+------------------------------------------------------+
| CAST((-1062726980 & 0xFFFFFFFF) AS UNSIGNED INTEGER) |
+------------------------------------------------------+
| 3232240316 |
+------------------------------------------------------+
Но я не могу заставить его работать наоборот (обратите внимание: MySQL использует 64-битную арифметику, делая забросы).
Спасибо.
Извините, но это не сработает на некоторых 64-битных системах, где по умолчанию используется PHP-int. – Alex