我在名为NUMBER的表中有一个名为TEST的字段

NUMBER is int(8) Unsigned Zerofill Not Null


我现在需要在该字段中使用负数,但我仍然希望它们为零填充
例如-00023419

我可以将其更改为带符号,但似乎无法填满零。

如果我这样做:alter table test modify number int(8) signed zerofill not null-
保持未签名的零填充

如果我这样做:alter table test modify number int(8) zerofill not null-
  保持未签名的零填充

如果我这样做:alter table test modify number int(8) signed not null-
我签署了,但没有填零

当我将其设置为签名时,我输入了一个负数,然后尝试将其更改为Zerofill,并将该数字更改为00000000,并且所有内容均再次设置为unsigned。不可能签署零填充数字?

最佳答案

https://dev.mysql.com/doc/refman/5.7/en/numeric-type-attributes.html说:


  如果为数字列指定ZEROFILL,则MySQL自动将UNSIGNED属性添加到该列。


在2006年报告为错误,并关闭为“不是错误”。
https://bugs.mysql.com/bug.php?id=24356



发表您的评论:


  那么,这是否意味着在mysql数据库中没有人有负零填充数据?


对。 ZEROFILL最常见的用例是确保邮政编码或银行帐号之类的东西使用固定的数字。这些情况无论如何都不支持负值,那么为什么要打扰-00001234这样的丑陋字符串呢?


  可以将其转换为PHP填充为零的代码吗?


是的,您可以在PHP中使用零填充来格式化数字。

<?php

$n = -1234;
printf("Number is %08d\n", $n);


输出:

Number is -0001234


阅读http://php.net/manual/en/function.sprintf.php可以更轻松地完成printf() / sprintf()格式化操作。

10-02 01:01
查看更多