2011-01-29 71 views
3

我有一個bigint字段,當輸入一個數字時,例如'05555555555',0被剝離並且只能插入'5555555555'mySQL剝離開始0?

我應該使用什麼數據類型來防止這種情況?

回答

4

你不能。整數列(bigint's)不存儲前導零(即以可視化表示)

而不是試圖存儲前導零(通過使用varchar字段),有一個視圖(或其他)將整數格式化爲字符串,您需要的格式。

如果您需要在域模型中存儲實際上是字符串的內容(例如電話號碼),請使用字符串而不是整數類型字段。

+2

奇怪的是,這是downvoted,但安德魯摩爾的回答是兩次upvoted當他們說同樣的事情。 – 2011-01-29 05:33:09

+0

@Andrew - ZEROFILL以視覺的方式完成這一切。它甚至用PHP組合來呈現零填充的最終結果。檢查OP的其他問題。 – RichardTheKiwi 2011-01-29 06:34:31

1

bigint將數據存儲爲數字,並且055555555555555555555是相同的數字。您需要一個字符串類型來保留前導零,例如具有合適的最大長度的varchar

-2

您可能會考慮更改該字段以使用UNSIGNED ZEROFILL。這應該允許你存儲帶有前導零的數字。

2

BIGINT整數列不存儲多個視覺表示,僅在二進制形式(BIGINT爲8個字節)的數目本身。 5555555555存儲爲:如果前面的零對數據的完整性顯著

00000000 00000000 00000000 00000001 01001011 00100011 00001100 11100011

,你應該用一個VARCHARCHAR而不是整數類型。數字數據類型只能用於數字數據。美國郵政編碼和電話號碼不是數字數據。

-1

問題是如果你有一個擁有數十萬行的大數據庫,bigint,比VARHAR字段快得多。我遇到了一個類似的問題,產品數據庫中充滿了歐洲商品編號(EAN)。其中一些代碼以0開頭。當我將其更改爲VARCHAR時,需要8秒來加載某些搜索EAN代碼的頁面,當我更改時它BIGINT它變成2秒。 確實速度差異很大。