【发布时间】:2012-09-17 12:38:45
【问题描述】:
我最近深入研究了令人兴奋的 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。
显示宽度不限制可取值范围 存储在列中。它也不会阻止比列更宽的值 显示宽度无法正确显示。例如,一列 指定为 SMALLINT(3) 的 SMALLINT 范围通常为 -32768 到 32767,三位数允许范围之外的值是 使用三位数以上的完整显示
与可选(非标准)属性结合使用时 ZEROFILL,空格的默认填充被零替换。为了 例如,对于声明为 INT(4) ZEROFILL 的列,值 5 是 检索为 0005。
因此,如果我没看错的话,除非您使用 zerofill,否则声明 INT(255) 之类的东西是没有用的。好的,你声明一个数据类型是有道理的,数据库会为该数据库分配足够的空间。
那么为什么人们要编写这样的代码呢?它有目的吗?我完全误解了吗?
【问题讨论】:
-
我不知道人们为什么要写这样的代码。它绝对没有任何目的,并且是许多误解的根源(如果你问我,这是 MySQL 中另一个糟糕的设计选择)
标签: mysql database sqldatatypes