4

dotnet、java、c ++のようなphpでInt64を使用する方法は?

例えば:

mysqlのデータ型はbigint(20)です。phpから値を保存したいと思います。1つの解決策が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"
}

どうしたらいいのかわからない?

4

1 に答える 1

6

PHPのINTタイプは、CPUインストールされているPHPのバージョンにリンクされています(64ビットCPUに32ビットPHPをインストールできます)。

PHPがサポートできる最大整数を調べるには、単純に

echo PHP_INT_MAX;

そして、これはあなたに最大を与えるでしょう。それはあなたに20億、または読むには大きすぎる膨大な数(9.2億億程度)のいずれかを与えるでしょう。

署名されていることに注意してください(-20億-> +20億、または-9ガジリオン-> +9ガジリオン)。mySQLではunsignedを指定できますが、PHPにはこのオプションはありません。

20億の制限しかない場合は、32ビットバージョンのPHPがインストールされています。PHP 64ビットを64ビットCPUにインストールするか、文字列として処理する必要があります。または、BC Math関数を使用して、mySQLから取得した文字列を数値に変換することもできますが、JSON_encodeはわかりません。それを処理します*。数が多い場合は、問題なく整数として処理できます。

  • JSON_encode注:過去に、JSON_encodeとシリアル化によって大きな数値が浮動小数点に変換され、整数の整数であっても内部的に精度が低下することに気づきました。最近または64ビットでテストしていませんが、注意が必要なもう1つの落とし穴です。

編集:マニュアルの関連ページは次のとおりです。http://php.net/manual/en/language.types.integer.php また、 BCMathの代わりにGMPを追加します。

于 2012-08-21T06:56:36.067 に答える