我需要MySQL在整数字段中存储数字并保持前导零。我不能使用zeroffill选项,因为我当前的字段是Bigint(16),数字可以在前导零的数量上变化。IE: 0001 - 0005,那么008 - 010可能需要存储。我不关心数字的唯一性(这些不被用作id或任何东西),但我仍然需要将它们最好存储为INTS。
使用CHAR/VARCHAR然后在PHP中将值类型转换为整数的问题意味着通过查询排序结果会导致字母数字排序,例如:SORT BY number ASC将产生
001
002
003
1
100
101
102
2
显然不是按数字顺序排列,而是按字母数字顺序排列,这是不需要的。
希望有一些聪明的解决办法:)
保持数字存储为整数
然后使用函数 LPAD()
显示带有零的数字(左):
SELECT LPAD( 14, 7, '0') AS padded;
| padded |
-----------
| 0000014 |
如果零填充字符的数量是可变的,则在表中添加另一个具有该(零填充)长度的列
改变字段的结构,使Attributes UNSIGNED_ZEROFILL
保留0
但是要注意字段的长度,因为它会将所有剩余的数字返回为零所以输入字段的长度
您仍然可以使用CAST对字符串(CHAR/VARCHAR)列像整数一样排序
ORDER BY CAST(`col_name` AS SIGNED) DESC
因此,您可以将它们存储在CHAR/VARCHAR类型的字段中
不能存储前导零的整数。一种方法是将它保存在varchar和int列中。在这种情况下,您需要两列,一个值和另一个intValue,在排序时,您可以使用intValue进行排序。这很容易实现。
Select Value from Table order by intValue;
另一个选项可以使用两列,一个value和另一个NumOfZero,并将它们用于所需的结果。这很复杂,但对数据库来说可能很简单。