我在名为NUMBER
TEST
的字段
NUMBER is int(8) Unsigned Zerofill Not Null
我现在需要这个领域的负数,我仍然喜欢他们zerofilled
例如-00023419
我可以将其更改为已签名,但似乎无法获得零填充。
如果我这样做:alter table test modify number int(8) signed zerofill not null
-
它保持未签名的zerofill
如果我这样做:alter table test modify number int(8) zerofill not null
-
它保持未签名的zerofill
如果我这样做:alter table test modify number int(8) signed not null
-
我签了名但没有zerofill
当我设置为签名时,我输入一个负数,然后尝试更改为zerofill,数字更改为00000000
,所有内容都再次设置为无符号。签署零填充号码是不可能的吗?
答案 0 :(得分:3)
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()
进行的更整洁的格式设置。
答案 1 :(得分:1)
ZEROFILL暗示UNSIGNED。
MySQL参考手册https://dev.mysql.com/doc/refman/5.7/en/numeric-type-attributes.html
如果为数字列指定ZEROFILL,MySQL会自动将UNSIGNED属性添加到列中。
考虑到所有潜在问题,我避免使用非标准的MySQL ZEROFILL
属性。
答案 2 :(得分:-1)
好吧,如果您的列是外键或主键,MySQL不允许进行此修改。你必须事先做到这一点。