如果我们不需要前导零,那么在 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
时,他们不再输出这种误导性语法。不鼓励使用整数长度。
假设我们有一个包含两个场景的简单 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
时,他们不再输出这种误导性语法。不鼓励使用整数长度。