noe*_*oel 6 mysql database sqldatatypes
我最近钻研了令人兴奋的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 ;
Run Code Online (Sandbox Code Playgroud)
在看到像id tinyint(4)我想知道参数传递给数据类型的行之后.我认为"这是否意味着id可以是-128到127之间的任何整数(不超过4个字符)?"
所以我咨询了文档.这就是MySQL文档对数字类型属性的看法.
显示宽度不会限制可以存储在列中的值的范围.它也不会阻止比列显示宽度更宽的值正确显示.例如,指定为SMALLINT(3)的列的通常SMALLINT范围为-32768到32767,超出三位数允许的范围之外的值将使用三位数以上显示
与可选(非标准)属性ZEROFILL结合使用时,默认的空格填充将替换为零.例如,对于声明为INT(4)ZEROFILL的列,将值5检索为0005.
因此,如果我正确地阅读此内容,INT(255)除非您使用zerofill,否则宣布类似的内容是无用的.确定一个数据类型,数据库为该数据库分配了足够的空间.
那么人们为什么要编写这样的代码呢?它有用吗?我完全误会了吗?
nic*_*nda 13
这个额外的"功能"显示宽度非常混乱,因为在其他列类型CHAR中指定长度.
这是一个简短的细分:
ZEROFILL在具有显示宽度的列上使用,并且存储的数字的字符串表示比显示宽度短,则将使用零填充左边.如果它更长,没有任何反应.如果选择INT(5)且值为13,则返回为00013.如果值为123456,则返回为123456.ZEROFILL,根本就没有填充(没有空格等)ZEROFILL,您必须知道该列也将是UNSIGNED我不喜欢显示宽度,因为存储层"知道"存储数据的可视化呈现.除此之外,我没有意识到这一点.