2009-08-30 101 views
1

嗨我的數據庫中有一列設置爲Int。MySQL Int刪除0

但是我的數據總是以0開始,所以無論何時我添加一條新記錄,它都會關閉0,我不希望這樣做,因爲第一個字符必須是1。

我該如何解決這個問題?

是使用VARCHAR,然後使用PHP驗證的最佳方式?

更新

如果我輸入02118272將其保存到數據庫2118272.

+0

您能舉一個數據的例子:它現在是什麼樣子,你想要它看起來像什麼? – Quassnoi 2009-08-30 13:05:53

+4

這是一個演示問題,而不是數據問題。你想「出示」你的號碼02118272,但號碼仍然是2118272.你需要在你的用戶界面中解決這個問題。 – 2009-08-30 13:11:29

回答

1

我認爲你應該使用VARCHAR類型的那場。如果你想給一個變量轉換成PHP爲整數,你可以簡單地這樣做:

$var=preg_replace("/[^\d]/","",$var); 

這樣,你會刪除那些沒有數字的所有字符,然後你可以把這個值放入數據庫保持最初的0。

+1

-1當格式化可能會將兩個值彼此區分時,存儲數字的格式只是一個好主意。例如01與1不一樣。 – JohnFx 2010-04-21 22:23:18

+0

它更容易使用intval() – SheperdOfFire 2013-02-26 13:39:34

6

整數7與整數000000000000000000000000007相同。他們都是......你知道......七。當存儲在數據庫中時,它實際上存儲爲類似000000000000000000000000007的東西,但大多數MySQL客戶端不會顯示所有這些零。

如果它在你的應用程序中使用一定數量的數字顯示這些數字很重要,你只要你想使用str_pad()功能,還可以重新添加儘可能多的前導零:

str_pad($your_string, 10, '0', STR_PAD_LEFT); 

這裏,10是長度你想要的字符串是,'0'是將被添加到的字符,以使其長度,並STR_PAD_LEFT說,將字符添加到字符串的左側。

如果,另一方面,數'007'比數'7'根本不同的,那麼你將不得不使用VARCHAR()字段來存儲它。那些不再是整數;他們是具有非常不同含義的字符串。

+0

它甚至沒有以十進制數字的形式存儲在數據庫中,所以聲稱它在數據庫中具有前導零是錯誤的。這就是說,這個答案的其餘部分是處理這個問題的正確方法。 – 2009-08-30 13:13:45

+2

當然它在數據庫中具有前導零。數字7將被存儲爲「00000000000000000000000000000111」:一個32位整數,前導零爲29。當然,他們不是**十進制**零,但概念是完全一樣的。 – VoteyDisciple 2009-08-30 13:49:14

3

你應該存儲在你的數據庫中的是數據。該數據的格式是應用程序的責任,而不是數據庫本身。

我會把它作爲一個整數存儲起來,如果你需要將它保存到帶有前導零的7個小數位,那麼在將數據提取到應用程序之後,正確的位置就是這樣。