0

我有一个名为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并且所有内容再次设置为无符号。不可能签署零填充数字吗?

4

3 回答 3

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 将它转换为 zerofill 吗?

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

<?php

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

输出:

Number is -0001234

阅读http://php.net/manual/en/function.sprintf.php以了解您可以使用printf()/执行的更简洁的格式化操作sprintf()

于 2016-10-24T20:11:50.370 回答
1

ZEROFILL 意味着未签名。

MySQL 参考手册 https://dev.mysql.com/doc/refman/5.7/en/numeric-type-attributes.html

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

对于所有潜在的问题,我避免使用非标准的 MySQLZEROFILL属性。

于 2016-10-24T20:13:10.973 回答
-1

好吧,如果您的列是外键或主键,MySQL 不允许这种修改发生。您必须事先执行此操作。

于 2016-10-24T20:12:08.603 回答