gpt4 book ai didi

MySQL:为什么不使用 zerofill 指定显示宽度

转载 作者:可可西里 更新时间:2023-11-01 06:40:11 26 4
gpt4 key购买 nike

我最近深入研究了令人兴奋的 SQL 世界。我仍在努力思考这些概念。我一直在网上关注教程。其中许多教程都包含用于制作这样的表格的 SQL。

CREATE TABLE `users` (
`id` tinyint(4) NOT NULL AUTO_INCREMENT,
`username` varchar(10) NOT NULL,
`password` varchar(100) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ;

在看到像 id tinyint(4) 这样的行之后,我想知道传递给数据类型的参数是什么。我想“这是否意味着 id 可以是 -128 到 127 之间的任何整数(不超过 4 个字符)?”

所以我查阅了文档。这就是MySQL docs have to say about number type attributes .

The display width does not constrain the range of values that can be stored in the column. Nor does it prevent values wider than the column display width from being displayed correctly. For example, a column specified as SMALLINT(3) has the usual SMALLINT range of -32768 to 32767, and values outside the range permitted by three digits are displayed in full using more than three digits

When used in conjunction with the optional (nonstandard) attribute ZEROFILL, the default padding of spaces is replaced with zeros. For example, for a column declared as INT(4) ZEROFILL, a value of 5 is retrieved as 0005.

因此,如果我没看错的话,除非您使用 zerofill,否则声明诸如 INT(255) 之类的内容是无用的。好的,您声明一个数据类型是有道理的,数据库会为该数据库分配足够的空间。

那么为什么人们要这样写代码呢?它有目的吗?我完全误解了吗?

最佳答案

这个额外的“特征”显示宽度非常困惑,因为在其他列类型中,例如 CHAR 指定了长度。

这是一个简短的分割:

  • 最重要的是:指定“存储空间”或“位数”。它只是说明该列中的数据在返回之前是如何格式化的。 INT(5) 可以存储相同 值,如 INT(16) 或 INT(255) - 所有这三个都可以存储所有(且仅)对 INT 有效的值。 INT(255) 不能存储 255 位数字。它们的存储空间都是一个INT占用的空间。
  • 如果您在具有显示宽度的列上使用 ZEROFILL,并且存储数字的字符串表示形式比显示宽度短,则将用零填充左侧。如果时间更长,则什么也不会发生。如果您选择 INT(5) 并且值为 13,它将返回为 00013。如果值为 123456,它将返回为 123456。
  • 如果您不使用 ZEROFILL,则根本没有填充(没有空格等)
  • 如果您使用 ZEROFILL,您必须知道该列也将是 UNSIGNED
  • 在任何情况下,查询表格元数据时都会返回显示宽度。因此应用程序可以知道应该如何格式化数据。

我不喜欢显示宽度,因为存储层“知道”存储数据的视觉呈现。除此之外,据我所知没有任何用处。

关于MySQL:为什么不使用 zerofill 指定显示宽度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12592376/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com