在MySQL数据库中以INTEGER存储整数的前导零

时间:2011-07-29 12:51:27

标签: php mysql string integer varchar

我需要MySQL将数字存储在整数字段中并保持前导零。我不能使用zerofill选项,因为我的当前字段是Bigint(16),并且数字可以在前导零的数量上变化。 IE:0001- 0005,然后可能需要存储008-010。我并不关心数字的唯一性(这些数字不被用作ID或任何东西),但我仍然需要将它们优选地存储为INTS。

使用CHAR / VARCHAR然后在PHP中将值类型转换为整数的问题意味着通过查询对结果进行排序会导致字母数字排序,IE:SORT BY数字ASC会产生

001
002
003
1
100
101
102
2

显然不是按数字顺序,而是按字母数字顺序,这是不需要的。

希望有一些聪明的解决方法:)

4 个答案:

答案 0 :(得分:22)

将数字保存为整数。

然后使用函数LPAD()显示用零填充的数字(左):

SELECT LPAD( 14, 7, '0') AS padded;

| padded  |
-----------
| 0000014 |

如果zerofill字符的数量是可变的,请在表格中添加另一列(zerofill)长度。

答案 1 :(得分:6)

您仍然可以使用CAST

对整数字符串(CHAR / VARCHAR)进行排序
ORDER BY CAST(`col_name` AS SIGNED) DESC

因此,您可以将它们存储在CHAR / VARCHAR类型字段中。

答案 2 :(得分:6)

您不能存储带前导零的整数。一种方法是将其保留在varchar和int列中。在这种情况下,您需要两列,一个值和另一个intValue,并且在排序时,您可以使用intValue进行排序。这很容易实现。

Select Value from Table order by intValue;

另一个选项可以使用两列,一个值和另一个NumOfZero,并使用这些列获得所需的结果。这很复杂,但可能在数据库上很清楚。

答案 3 :(得分:5)

更改字段的结构,并使属性UNSIGNED_ZEROFILL保持为零。

但你应该注意字段的长度,因为它会将所有其余的数字返回为零,所以把你的字段长度