在mysql裡設定了欄位類型是bigint的,20位
然後通過php讀取數組出來,使用json_encode
在不同的環境下,有不同的表現
1、這個欄位在json中是字串類型的,
2、這個欄位讀取出來是數字類型的,那麼問題就來了,這個時候json_decode出來的結果是科學計演算法的 + e。
這樣對前端使用,就有了苦難。
想問,這個讀取出來不同的類型,是跟什麼配置有關?php 的配置,mysql的配置。
我現在的作法就是不管,在最後輸出的時候,都轉換一次,變成字串。
補充一下
肯定不是32位、64位系統的問題。
同樣的表結構設計,同樣的64位環境
比如數組:144781210120784720
我的電腦取出來的值就是 字串類型的 "144781210120784720",所以json都沒問題
伺服器去取出來的就是數字類型的,所以json變成了+3
回複內容:
在mysql裡設定了欄位類型是bigint的,20位
然後通過php讀取數組出來,使用json_encode
在不同的環境下,有不同的表現
1、這個欄位在json中是字串類型的,
2、這個欄位讀取出來是數字類型的,那麼問題就來了,這個時候json_decode出來的結果是科學計演算法的 + e。
這樣對前端使用,就有了苦難。
想問,這個讀取出來不同的類型,是跟什麼配置有關?php 的配置,mysql的配置。
我現在的作法就是不管,在最後輸出的時候,都轉換一次,變成字串。
補充一下
肯定不是32位、64位系統的問題。
同樣的表結構設計,同樣的64位環境
比如數組:144781210120784720
我的電腦取出來的值就是 字串類型的 "144781210120784720",所以json都沒問題
伺服器去取出來的就是數字類型的,所以json變成了+3
這跟配置無關,這跟語言有關, php的int類型的最大值是PHP_INT_MAX(你可以運行下,我這裡是2147483647),超過這個值就會用科學計數法表示。
32位系統支援的php最大整形是2147483647
64位的是9223372036854775807
所以.......
MySQLi不使用prepare查詢返回的欄位類型全部是string,值跟資料庫儲存的內容一致.使用prepare時跟pdo_mysql關閉類比預先處理(PDO::ATTR_EMULATE_PREPARES => false)一樣,返回的資料類型對應資料表的欄位類型.
另外,拿我的環境來說(Ubuntu 14.04 AMD64),MySQL有符號bigint整型的欄位最大能儲存的整數是9223372036854775807,跟PHP_INT_MAX的值是一樣的.
SELECT CAST(12345678901234567890 AS CHAR(20)) AS COLFROM TB
從資料庫中讀取bigint時替換為varchar類型,應該可以解決你的問題吧。