zerofill在MySQL中有什么好处?

diE*_*cho 153 mysql types unsigned-integer

我只是想知道ZEROFILLINTDataType 定义的好处/用法是MySQL什么?

`id` INT UNSIGNED ZEROFILL NOT NULL 
Run Code Online (Sandbox Code Playgroud)

Mar*_*ers 238

当您选择类型为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;
Run Code Online (Sandbox Code Playgroud)

结果:

        x          y
 00000001          1
 00000012         12
 00000123        123
123456789  123456789
Run Code Online (Sandbox Code Playgroud)

  • 我强烈建议你远离这个功能 - 如何显示/格式化数值是一个表示问题,绝对不是属于数据库级别的东西; 至少不是如果你使用数据库支持一个软件.请注意,这可能会导致问题 - 如果您将前导零值解析为整数,则许多解析器会将该值视为八进制,这可能不是您想要的.您应该使用此功能的唯一时间是(存储)优化,当您实际存储的内容实际上是(固定长度)数字字符串. (70认同)
  • @diEcho:例如,如果您希望所有发票号都以10位数显示,那么您可以将该列的类型声明为INT(10)ZEROFILL. (49认同)
  • 什么是用法?你只是解释它是如何工作的 (14认同)
  • @ mindplay.dk:取决于.如果您存储类似GTIN的东西,它们必须是14位数字,但也可以只是8位数,并用零填充左边.在这种情况下,依赖于输出端是不对的,因为它不仅仅是小数,而是键. (3认同)

Phi*_*hil 127

一个例子是为了理解ZEROFILL的使用可能有用的地方:

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

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

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

  1. 硬盘上的存储空间较小
  2. 如果你插入1067,你仍然会得到01067

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

  • 值得补充的是,显示数据的**SQL客户端**负责使用前导零格式化数字.这不是每个应用程序在处理数据时"自动"发生的事情. (7认同)
  • @Pacerier 这取决于您希望如何将客户端库中的数据表示为数字或字符串。德国邮政编码不是数字,它只是由数字组成的字符串。因此,我不同意你在 MySQL 早期关于糟糕设计的说法。这仍然是一种有效的方法,但对于极少数情况。 (3认同)

Eli*_*ine 60

对于喜欢方盒的受干扰的人来说,这是一个特色.

你插入

1
23
123 
Run Code Online (Sandbox Code Playgroud)

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

000001
000023
000123
Run Code Online (Sandbox Code Playgroud)


Ken*_*Ken 15

它有助于在您需要的情况下正确的排序串连这个"整"用别的东西(另一个号码或文字),这将需要进行排序为"文本"即可.

例如,

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


Mar*_*lin 5

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