Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/65.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/performance/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 将MySQL数据库中整数的前导零存储为整数_Php_Mysql_String_Integer_Varchar - Fatal编程技术网

Php 将MySQL数据库中整数的前导零存储为整数

Php 将MySQL数据库中整数的前导零存储为整数,php,mysql,string,integer,varchar,Php,Mysql,String,Integer,Varchar,我需要MySQL将数字存储在整数字段中,并保持前导零。我不能使用zerofill选项,因为我的当前字段是Bigint(16),并且数字的前导零数量可能会有所不同。IE:0001-0005,则可能需要存储008-010。我不关心数字的唯一性(它们没有被用作ID或任何东西),但我仍然需要将它们最好存储为INT 使用CHAR/VARCHAR,然后在PHP中将值类型转换为整数,这意味着通过查询对结果进行排序将导致字母数字排序,即:ASC将生成按数字排序 001 002 003 1 100 101 102

我需要MySQL将数字存储在整数字段中,并保持前导零。我不能使用zerofill选项,因为我的当前字段是Bigint(16),并且数字的前导零数量可能会有所不同。IE:0001-0005,则可能需要存储008-010。我不关心数字的唯一性(它们没有被用作ID或任何东西),但我仍然需要将它们最好存储为INT

使用CHAR/VARCHAR,然后在PHP中将值类型转换为整数,这意味着通过查询对结果进行排序将导致字母数字排序,即:ASC将生成按数字排序

001
002
003
1
100
101
102
2
显然不是数字顺序,而是字母数字顺序,这是不需要的


希望有一些巧妙的解决方法:)

您仍然可以使用


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

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

Select Value from Table order by intValue;

另一个选项可以使用两个列,一个是valu,另一个是NumOfZero,并使用它们获得所需的结果。这很复杂,但对数据库来说可能很简单。

将数字存储为整数

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

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

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

如果零填充字符的数量是可变的,请在表中添加另一个具有该(零填充)长度的列。

更改字段的结构,并使属性
无符号\u零填充
保留零


但是你应该注意字段的长度,因为它会将所有剩余的数字返回到零,所以把字段的长度设置为整数,而不是前导零。只能使用它们的字符串表示形式。因此,如果“需要”前导零,则必须存储字符串表示。为什么不能在显示时进行这种格式化,而不是将其放入数据库?1和001以及不同的值。但作为int,它们是相同的:如何对它们进行排序和比较?as int或as varchar?也可以按col_name+0 DESC对varchar进行排序。注意:如果您知道该列的长度始终相同,请使用CHAR,而不是varchar。即使我可以确认您的查询工作正常,但我怀疑,当
lpad
用于数字类型时,是否会对性能产生影响?这是因为
lpad
是一个
字符串函数
。考虑有一个查询获取大量记录的场景,并且<代码> LDAP 用于格式化数字类型的输出。
SELECT LPAD( 14, 7, '0') AS padded;

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