Как использовать Int64(long) в php, но не в строке?
Как использовать Int64 в php как dotnet, java, C++?
Например:
Тип данных - это bigint(20) в mysql, я хочу сохранить значение из php. Я знаю, что одним из решений является использование строки в процедурах mysql.
настольный шкаф:
CREATE TABLE `test_int64` (
`id` bigint(20) unsigned NOT NULL DEFAULT '0'
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
случай процедур mysql:
CREATE PROCEDURE `sp_test_int64`(IN p_id VARCHAR(20))
NOT DETERMINISTIC
SQL SECURITY DEFINER
COMMENT ''
BEGIN
INSERT INTO test_int64(id) VALUES(p_id+0);
END;
PHP код дела:
$id = '1660820628901389'; Then execute sql 'call sp_test_int64(\''.$id.'\')'
Описанный выше метод в порядке, но я не хочу этого делать. Есть ли другие решения?
пример 2:
Я хочу использовать PHP для чтения MYSQL вывода данных JSON-код, как это:
{
"id":1660820628901389
}
но нет:
{
"id":"1660820628901389"
}
Я не знаю как это сделать?
1 ответ
Тип INT в PHP связан с процессором и установленной версией PHP (на 64-битном процессоре можно установить 32-битный PHP).
Чтобы узнать, что может поддерживать максимальное целое число PHP, просто
echo PHP_INT_MAX;
И это даст вам максимум. Это даст вам либо 2 миллиарда, либо огромное число, слишком большое для чтения (9,2 миллиарда или около того).
Обратите внимание, что он подписан (-2 миллиарда -> +2 миллиарда или -9 миллиардов -> +9 миллиардов). Если вы можете указать unsigned в mySQL, у вас нет этой опции в PHP.
Если у вас есть только 2-миллиардный лимит, значит, у вас установлена 32-битная версия PHP. Вы можете установить 64-битный PHP на 64-битном процессоре, или вам нужно обрабатывать как строку, или вы могли бы использовать функции BC Math для преобразования строки, которую вы возвращаете из mySQL, в числовое значение, но я не уверен, JSON_encode справится с этим *. Если у вас есть большое число, вы должны быть в порядке и можете обрабатывать как целое число.
- Примечание JSON_encode: в прошлом я заметил, что JSON_encode и serialize преобразуют большие числа в числа с плавающей запятой, а затем теряют точность внутри, даже через целые числа. Я не тестировал недавно или на 64-битной версии, но это еще одна проблема, на которую стоит обратить внимание.
Изменить: Вот соответствующая страница в руководстве: http://php.net/manual/en/language.types.integer.php Он также добавляет GMP в качестве альтернативы BC Math