Как использовать 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

Другие вопросы по тегам