php mysql bigint 類型

來源:互聯網
上載者:User
在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類型,應該可以解決你的問題吧。

  • 相關文章

    聯繫我們

    該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

    如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

    A Free Trial That Lets You Build Big!

    Start building with 50+ products and up to 12 months usage for Elastic Compute Service

    • Sales Support

      1 on 1 presale consultation

    • After-Sales Support

      24/7 Technical Support 6 Free Tickets per Quarter Faster Response

    • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.