2016-12-16 72 views
1

我有一個數據庫和一個bigint列類型。每次我向這個列插入值時,我總是得到錯誤的數字。例如,我插入值「198705122006041001」並始終插入此值「2147483647」。bigint沒有正確插入

我爲我的項目使用laravel,如果我使用雄辯來顯示bigint它不會正確顯示,但如果我手動使用PDO,它將正確顯示。

回答

2

您應該再次檢查一次,因爲它絕對是int,但不是bigint2147483647是一個maximum possible value for signed int

+0

我的問題是,如果我使用Eloquent來顯示這個列的值,那麼無論值是什麼,它都會回收2147483647。如果我手動使用PDO檢索數據,它將顯示正確的值。 那麼我怎麼能在言語中處理這個Bigint呢? 轉換爲varchar /文本或字符串不是一個選項。謝謝 –

2

PHP沒有bigint數據類型,它溢出並使用int.max來代替。你必須將bigint表示爲字符串或浮點數。請注意,浮動不精確,可能會導致意外。

在MySQL中進行數學轉換,並且在必要時不要忘記轉換爲bigint。

+0

我的問題是如果我使用Eloquent來顯示這個列的值,它將回收2147483647,不管它是什麼值。如果我手動使用PDO檢索數據,它將顯示正確的值。那麼我怎麼能在雄辯中處理這個Bigint呢?轉換爲varchar /文本或字符串不是一個選項。謝謝 –

1

請參閱https://laracasts.com/discuss/channels/eloquent/fbid-bigint-with-model-and-eloquent。 Laravel用戶遇到同樣的問題,最終不得不將結果轉換爲字符串。

另一位用戶評論指出,XAMPP只提供一個32位PHP二進制文件,它限制了PHP整數的大小。

使用此代碼檢查你的PHP整數大小:

<?php 

echo "Integer size can be determined using the constant PHP_INT_SIZE=" 
    . (PHP_INT_SIZE * 8) 
    . " bits, maximum value using the constant PHP_INT_MAX=" 
    . PHP_INT_MAX; 

http://php.net/manual/en/language.types.integer.php

請參閱安裝https://laravel.com/docs/5.3/homestead,並得到一個64位二進制PHP。