zerofill在MySQL中有什么好处?

时间:2011-03-10 06:57:38

标签: mysql types unsigned-integer

我只是想知道在ZEROFILL中为INT DataType定义 MySQL 的好处/用法是什么?

`id` INT UNSIGNED ZEROFILL NOT NULL 

9 个答案:

答案 0 :(得分:229)

当您选择类型为ZEROFILL的列时,它会用零填充字段的显示值,直到列定义中指定的显示宽度。长度超过显示宽度的值不会被截断。请注意,使用ZEROFILL也意味着UNSIGNED。

使用ZEROFILL和显示宽度不会影响数据的存储方式。它只影响它的显示方式。

以下是一些演示使用ZEROFILL的示例SQL:

CREATE TABLE yourtable (x INT(8) ZEROFILL NOT NULL, y INT(8) NOT NULL);
INSERT INTO yourtable (x,y) VALUES
(1, 1),
(12, 12),
(123, 123),
(123456789, 123456789);
SELECT x, y FROM yourtable;

结果:

        x          y
 00000001          1
 00000012         12
 00000123        123
123456789  123456789

答案 1 :(得分:125)

一个例子是为了理解ZEROFILL的使用可能在哪里:

在德国,我们有5位数的邮政编码。但是,这些代码可能以零开头,因此80337是munic的有效邮政编码,01067是柏林的邮政编码。

如您所见,任何德国公民都希望邮政编码显示为5位数代码,因此1067看起来很奇怪。

为了存储这些数据,您可以使用VARCHAR(5)或INT(5)ZEROFILL,而零填充整数有两大优点:

  1. 硬盘上较小的存储空间
  2. 如果您插入1067,则仍然可以获得01067
  3. 也许这个例子有助于理解ZEROFILL的使用。

答案 2 :(得分:57)

这是喜欢方盒子的不安个性的特色。

您插入

1
23
123 

但是当你选择时,它会填充值

000001
000023
000123

答案 3 :(得分:15)

如果你需要连接这个“整数”与其他东西(另一个数字或文本)需要被排序为“文本”,它有助于正确排序。

例如,

如果您需要使用整数字段数字(假设为5)连接为A-005或10/0005

答案 4 :(得分:3)

我知道我迟到了,但我发现zerofill对TINYINT(1)的布尔表示有帮助。 Null并不总是意味着虚假,有时你不想要它。通过对一个tinyint进行零填充,您可以有效地将这些值转换为INT,并消除应用程序在交互时可能产生的任何混淆。然后,您的应用程序可以以与原始数据类型True = Not(0)

类似的方式处理这些值

答案 5 :(得分:3)

mysql> CREATE TABLE tin3(id int PRIMARY KEY,val TINYINT(10) ZEROFILL);
Query OK, 0 rows affected (0.04 sec)

mysql> INSERT INTO tin3 VALUES(1,12),(2,7),(4,101);
Query OK, 3 rows affected (0.02 sec)
Records: 3  Duplicates: 0  Warnings: 0

mysql> SELECT * FROM tin3;
+----+------------+
| id | val        |
+----+------------+
|  1 | 0000000012 |
|  2 | 0000000007 |
|  4 | 0000000101 |
+----+------------+
3 rows in set (0.00 sec)

mysql>

mysql> SELECT LENGTH(val) FROM tin3 WHERE id=2;
+-------------+
| LENGTH(val) |
+-------------+
|          10 |
+-------------+
1 row in set (0.01 sec)


mysql> SELECT val+1 FROM tin3 WHERE id=2;
+-------+
| val+1 |
+-------+
|     8 |
+-------+
1 row in set (0.00 sec)

答案 6 :(得分:1)

  

与...一起使用时   可选(非标准)属性   ZEROFILL,默认填充   空格用零替换。对于   例如,对于声明为的列   INT(4)ZEROFILL,值为5   检索为0005。

http://dev.mysql.com/doc/refman/5.0/en/numeric-types.html

答案 7 :(得分:1)

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

允许UNSIGNED属性的数字数据类型也允许SIGNED。但是,默认情况下会对这些数据类型进行签名,因此SIGNED属性不起作用。

以上描述取自MYSQL官方网站。

答案 8 :(得分:0)

ZEROFILL

这实质上意味着如果将整数值23插入宽度为8的INT列中,则剩余的可用位置将自动用零填充。

因此

23

变为:

00000023