在数据库INT字段中保留4位数?

20 浏览
0 Comments

在数据库INT字段中保留4位数?

我只想知道在MySQL中为INT数据类型定义ZEROFILL的好处/用途是什么?

`id` INT UNSIGNED ZEROFILL NOT NULL

0
0 Comments

维持数据库INT中的4位数字?

这个问题出现的原因是,某些人喜欢在数据库中使用方框形式的填充。

解决方法是,在插入时,将数字按照4位进行填充,而在选择时,将值进行零填充。

代码示例:

-- 创建一个名为table_name的表,包含一个名为column_name的INT列
CREATE TABLE table_name (
  column_name INT
);
-- 插入数据时,将数字按照4位进行填充
INSERT INTO table_name (column_name) VALUES
  (LPAD(1, 4, '0')),
  (LPAD(23, 4, '0')),
  (LPAD(123, 4, '0'));
-- 选择数据时,将值进行零填充
SELECT LPAD(column_name, 6, '0') FROM table_name;

通过以上方法,可以在数据库中维持4位数字。

0
0 Comments

在使用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

如果您想让所有的发票编号显示为10位数,则可以将该列的类型声明为INT(10) ZEROFILL

我强烈建议您避免使用这个特性 - 数值的显示/格式化是一个表现层的关注点,绝对不是数据库层面的事情,至少如果您使用数据库来支持软件的话。请注意,这可能会导致问题 - 如果您将一个带有前导零的值解析为整数,许多解析器将把该值视为八进制数,这可能不是您想要的。唯一应该使用此特性的时候是作为一种(存储)优化,当您实际上存储的是一个(固定长度的)数字字符串时。

.dk:这取决于情况。如果您存储的是类似于GTIN这样的值,它们必须是14位数,但也可以只有8位数,并且左侧填充零。在这种情况下,依赖输出端是不正确的,因为它不仅仅是一个小数,而是一个键。

实际上,大多数客户端库(例如PHP)在将值传递给应用程序代码之前会简单地去掉零吗?如果是这样,那么它似乎有点没有意义。这是MySQL早期的一个设计失误。

我和.有同样的问题。对于所有实际目的来说,int列将映射到应用程序语言中的数字类型。显示属性会被忽略吗?我想不出JavaScript、C#或Java中存在带有显示属性的数字类型。

“在字段的显示值上填充零,直到达到列定义中指定的显示宽度”。有趣的是,我以前从未将长度称为“显示宽度”。我认为这是根据您选择的整数类型自动更改/设置的,所以我认为它与实际大小更相关,而不是期望的显示宽度。虽然我一直在使用PhpMyAdmin,并在使用char或varchar时将其留空。

0
0 Comments

维护数据库中的四位数(Maintain 4 digits in database INT?)

在德国,我们有5位数的邮政编码。然而,这些编码可能以零开头,所以80337是慕尼黑的有效邮政编码,01067是柏林的邮政编码。正如你所看到的,德国公民希望邮政编码显示为5位数,所以1067看起来很奇怪。为了存储这些数据,可以使用VARCHAR(5)或INT(5) ZEROFILL,而使用零填充整数有两个主要优点:

1. 在硬盘上占用更少的存储空间

2. 如果你插入1067,你仍然会得到01067

也许这个例子有助于理解ZEROFILL的用途。值得补充的是,显示数据的SQL客户端负责使用前导零格式化数字。这不是每个应用程序检索数据时都会自动发生的事情。固定宽度的列也更好,因为它们减少了磁盘碎片。

实际上,大多数客户端库(如PHP)在将其传递给应用程序代码之前会将零去掉,这样做似乎有些无意义。这是MySQL早期设计的一个问题。

这取决于您希望客户端库中的数据如何表示:作为数字还是字符串。德国的邮政编码不是一个数字,它是由数字组成的字符串。因此,我不同意您关于MySQL早期设计的观点。这仍然是一种有效的方法,但只适用于罕见的情况。在使用原生扩展(如mysqli)时,默认情况下,PHP将所有值都作为字符串检索,但是您可以使用mysqli::options(MYSQLI_OPT_INT_AND_FLOAT_NATIVE)将整数和浮点数值作为数字检索。

0