如果我们不需要前导零,那么在 SQL 中有一个长度为 1 的整数列在逻辑上是否正确?

Is it logically correct to have an integer column of length 1 in SQL if we don't need leading zeros?

假设我们有一个包含两个场景的简单 table 2 列。

ID 列长度为 10

CREATE TABLE `members` (
  `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `name` varchar(50) NOT NULL,
)

ID 列长度为 1

CREATE TABLE `members` (
      `id` int(1) unsigned NOT NULL AUTO_INCREMENT,
      `name` varchar(50) NOT NULL,
    )

如果我不需要 ID 列中的前导零,我可以将列 ID 的长度定义为 1 吗? 我不知道前导零在哪里有用,如果不需要前导零,我将整数列的长度定义为 1 有什么缺点。

简短的回答是:如果您完全不用它,可以将 zerofill 长度设置为 1。然而,有时您可能希望您的数字整齐对齐。例如,不是显示从 1 到 9999 的 ID 值,而是定义 int(4) zerofill 使值显示从 0001 到 9999。这在某些正式场景中可能会有帮助。

如果您不需要前导零,那么就不要使用 ZEROFILL 列选项,我看到您的 create table 语句中已经没有该选项。

整数的“长度”除了显示外没有任何意义。它不影响整数的存储大小,或者可以存储在其中的最大值。长度是可选的,我总是省略它。

示例:

CREATE TABLE `members` (
  `id` int unsigned NOT NULL AUTO_INCREMENT,
  ...

多年来,这一直是 MySQL 用户困惑的根源。 最后在 MySQL 8.0 中,当您使用 SHOW CREATE TABLE 时,他们不再输出这种误导性语法。不鼓励使用整数长度。