zerofill在MySQL中有什么好处?
我只是想知道在MySQL
为INT
types定义ZEROFILL
什么好处/用法?
`id` INT UNSIGNED ZEROFILL NOT NULL
当您select一个types为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;
结果:
xy 00000001 1 00000012 12 00000123 123 123456789 123456789
为了理解ZEROFILL的使用可能会出现的一个例子:
在德国,我们有5位数的邮编。 但是,这些代码可能以零开头,因此80337是munic的有效邮政编码,01067是柏林的邮政编码。
正如你所看到的,任何德国公民都希望邮政编码显示为5位数字的代码,所以1067看起来很奇怪。
为了存储这些数据,可以使用VARCHAR(5)或INT(5)ZEROFILL,而填充齐整的整数有两大优势:
- 很多硬盘上的存储空间较less
- 如果你插入1067,你仍然得到01067回来
也许这个例子有助于理解ZEROFILL的使用。
这是一个function不安的个性喜欢方盒子。
你插入
1 23 123
但是当您select时,它会填充值
000001 000023 000123
它有助于正确sorting的情况下,你将需要连接这个“整数”的东西(另一个数字或文本),这将需要被sorting为“文本”然后。
例如,
如果你需要使用连接成A-005或10/0005的整数字段(比如5)
我知道我迟到了,但是我发现zerofill对于TINYINT(1)的布尔表示是有帮助的。 空并不总是意味着错误,有时你不想要它。 通过zerofilling一个tinyint,你有效地将这些值转换为INT,并消除任何混淆你的应用程序可能有交互。 然后,您的应用程序可以以类似于原始数据typesTrue = Not(0)的方式处理这些值。
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,MySQL会自动将UNSIGNED属性添加到该列。
允许UNSIGNED属性的数字数据types也允许SIGNED。 但是,这些数据types是默认签名的,所以SIGNED属性不起作用。
以上描述来自MYSQL官方网站。
ZEROFILL
这基本上意味着如果将整数值23插入到宽度为8的INT列中,则剩余的可用位置将被自动填充为0。
于是
23
变为:
00000023
当与可选(非标准)属性ZEROFILL一起使用时,空格的默认填充被replace为零。 例如,对于声明为INT(4)ZEROFILL的列,值5被检索为0005。