186

我只想知道在中定义DataType的好处/用途ZEROFILL是什么?INTMySQL

`id` INT UNSIGNED ZEROFILL NOT NULL 
4

9 回答 9

273

当您选择具有类型的列时,ZEROFILL它将用零填充字段的显示值,直到列定义中指定的显示宽度。长于显示宽度的值不会被截断。请注意,of 的用法ZEROFILL也暗示UNSIGNED.

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

下面是一些示例 SQL,演示了如何使用ZEROFILL

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
于 2011-03-10T07:03:56.120 回答
142

一个例子可以理解,其中的用法ZEROFILL可能很有趣:

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

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

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

  1. 硬盘上的存储空间少了很多
  2. 如果你插入1067,你仍然会01067回来

也许这个例子有助于理解ZEROFILL.

于 2012-07-18T11:10:15.030 回答
63

这是喜欢方形盒子的受干扰的人的功能。

你插入

1
23
123 

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

000001
000023
000123
于 2011-03-10T07:09:13.727 回答
15

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

例如,

如果您需要使用连接为 A-005 或 10/0005的整数字段编号(比如说 5)

于 2013-08-24T20:43:37.657 回答
5

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

于 2012-09-06T05:42:06.010 回答
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)
于 2015-06-10T15:03:15.733 回答
2

零填充

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

因此

23

变成:

00000023
于 2011-03-10T07:03:03.870 回答
1

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

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

于 2011-03-10T07:05:28.913 回答
1

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

允许 UNSIGNED 属性的数值数据类型也允许 SIGNED。但是,这些数据类型默认是有符号的,所以 SIGNED 属性没有作用。

以上描述摘自MYSQL官网。

于 2012-05-20T16:20:41.083 回答