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

Mic*_*ael 20 php mysql string varchar integer

我需要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
Run Code Online (Sandbox Code Playgroud)

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

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

ype*_*eᵀᴹ 23

将数字保存为整数.

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

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

| padded  |
-----------
| 0000014 |
Run Code Online (Sandbox Code Playgroud)

如果zerofill字符的数量是可变的,则在表中添加具有该(zerofill)长度的另一列.


Sha*_*ngh 6

您仍然可以使用CAST对字符串(CHAR/VARCHAR)列进行排序

ORDER BY CAST(`col_name` AS SIGNED) DESC
Run Code Online (Sandbox Code Playgroud)

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

  • 也可以`ORDER BY col_name + 0 DESC`来对varchar进行排序,如整数 (2认同)

Kan*_*kan 6

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

Select Value from Table order by intValue;
Run Code Online (Sandbox Code Playgroud)

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


Nou*_*our 5

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

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