2009-08-30 93 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个小数位,那么在将数据提取到应用程序之后,正确的位置就是这样。