我只是想知道什么是确定的利益/用途ZEROFILL
用于INT
在数据类型MySQL
?
`id` INT UNSIGNED ZEROFILL NOT NULL
我只是想知道什么是确定的利益/用途ZEROFILL
用于INT
在数据类型MySQL
?
`id` INT UNSIGNED ZEROFILL NOT NULL
Answers:
选择带有类型的列时,ZEROFILL
它将用零填充字段的显示值,直到字段定义中指定的显示宽度。大于显示宽度的值不会被截断。请注意,的使用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
为了了解一个示例,其中的用法ZEROFILL
可能很有趣:
在德国,我们有5位邮政编码。但是,这些代码可能以零开头,因此80337
对于munic 01067
是有效的邮政编码,是Berlin的邮政编码。
如您所见,任何德国公民都希望邮政编码显示为5位数字的代码,因此1067
看起来很奇怪。
为了存储这些数据,您可以使用VARCHAR(5)
或,INT(5) ZEROFILL
而零填充整数有两个很大的优点:
1067
,您仍然会01067
回来也许这个例子有助于理解的使用ZEROFILL
。
这是喜欢方盒的不安人士的功能。
您插入
1
23
123
但是当您选择时,它会填充值
000001
000023
000123
我知道我参加聚会很晚,但是我发现Zerofill对于TINYINT(1)的布尔表示很有帮助。Null并不总是意味着False,有时您不希望如此。通过对tinyint进行零填充,可以有效地将这些值转换为INT并消除应用程序在交互时可能造成的任何混乱。然后,您的应用程序可以类似于原始数据类型True = Not(0)的方式处理这些值。
666
所以我宁愿保留这个答案;-)
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)
与可选(非标准)属性ZEROFILL结合使用时,默认的空格填充将替换为零。例如,对于声明为INT(4)ZEROFILL的列,将值5检索为0005。
zerofill
是非标准的。“ 当表达式或查询中涉及列时,该ZEROFILL
属性将被忽略UNION
。如果将大于显示宽度的值存储在具有该ZEROFILL
属性的整数列中,则当MySQL为某些复杂的联接生成临时表时,您可能会遇到问题。 ,MySQL假设数据值适合列显示宽度。 “