2011-08-13 68 views
0

我有下面的代碼爲我的實體:當我的變量總是轉換爲2147483647 ......時,這意味着什麼?

/** 
* 
* @Entity 
* @Table(name="group") 
* 
**/ 
Class Group { 

/** 
* 
* @Column(type="string", nullable=true) 
**/ 
private $phone; 

(etc...) 

__get($var) { 
return $this->$var; 
} 
__set($var, $val){ 
$this->$var = $val; 
} 

我再嘗試用數超過九個位數較大修改此。例如,

$group->phone = 5147811326; 

$ phone設置爲21474836471111111111(傳達到2147483647

如果我嘗試514781,它保持數字罰款。但超過9位數字只是轉換。我最初有一個整數的MySQL列,但將其轉換爲字符串...仍然是一個問題。

發生了什麼?!?? !!

+0

我不太瞭解doctrine2,但2147483647看起來像2^31-1或有符號整數最大值。它的邏輯性,5147811326轉換爲,因爲它更大。 1111111111小於2147483647所以它的奇數.. –

+0

我不知道wat doctrine2是,但我認識到你得到的數字是0x7FFFFFFF - 你可能會遇到某種數字溢出。 – Bevan

+0

我想不出溢出問題。您試圖擠壓更多的數據,而不是適合您使用的變量的大小。 – Hyperbole

回答

1

這意味着您使用的數據類型是32位。 2147483647等於2 - 1.

+0

爲什麼1111111111會轉換成那個呢?它適合於32位。 –

+0

是的,我認爲這是正確的。我現在只是使用一個字符串,它工作得更好。痛苦的時間結束了!謝謝! – Daniel

+0

111111111 ... doctring在轉換時可能會做些什麼。由於ORM位於PHP之上,我相信它在轉換時使用某種內存,可能是一個錯誤。 – Daniel

2

編號「5147811326」不能存儲在32位整數中,因爲根本沒有足夠的位。 32位整數的最高二進制值是「11111111 11111111 11111111 11111111」(或十進制系統中的2147483647)。嘗試使用64位整數或字符串來存儲電話號碼。

相關問題