Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/64.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql tinyint(尺寸)、varchar(尺寸):“;“尺寸”;解释_Mysql_Sql - Fatal编程技术网

Mysql tinyint(尺寸)、varchar(尺寸):“;“尺寸”;解释

Mysql tinyint(尺寸)、varchar(尺寸):“;“尺寸”;解释,mysql,sql,Mysql,Sql,我知道tinyint(1)和tinyint(2)的存储空间范围相同 唯一的区别是显示宽度不同。这是否意味着tinyint(1)将存储所有类型的整数,但仅正确显示从0到9的范围?tinyint(2)仅正确显示0到99 其中提到的最大尺寸是tinyint(255)。另外还有一些像varchar(500)类型的宽度。除非存储文章,否则在什么情况下,文本和整数都需要如此大的显示宽度?比如密码加密之类的 如果问题中的上述信息有任何错误,请纠正我 附加问题:显示宽度仅适用于char、varchar等,但不适

我知道tinyint(1)和tinyint(2)的存储空间范围相同

唯一的区别是显示宽度不同。这是否意味着tinyint(1)将存储所有类型的整数,但仅正确显示从0到9的范围?tinyint(2)仅正确显示0到99

其中提到的最大尺寸是tinyint(255)。另外还有一些像varchar(500)类型的宽度。除非存储文章,否则在什么情况下,文本和整数都需要如此大的显示宽度?比如密码加密之类的

如果问题中的上述信息有任何错误,请纠正我

附加问题:显示宽度仅适用于char、varchar等,但不适用于整数类型


然而,为什么要费心加上“M”呢?因为对于整数来说,除了零填充之外,它在存储时不会有什么区别。

您解决混淆的方法是-

在Mysql中,int(6)并不意味着它们最多可以存储6位数字。不超过999999

但是(6) 这表示一个字符列,最大长度为6个字符,例如:

房屋

如果我尝试在该列中存储单词“special”,MySQL会将该值切碎为“special”,因为原始单词有7个字符

无论如何,整数列都有一个允许的预设值范围。括号中的数字仅表示显示宽度

这可能仍然令人困惑,所以让我进一步解释

显示宽度是一个从1到255的数字。如果希望所有整数值以类似方式“显示”,则可以设置显示宽度:

TINYINT[(M)][未签名][零填充]


M表示整数类型的最大显示宽度。最大显示宽度为255。显示宽度与类型可以包含的值的范围无关。对于浮点和定点类型,M是可存储的总位数

如果为数值列指定ZEROFILL,MySQL会自动将未签名属性添加到该列中

所以你们问题的答案是

create table foo
(
col2 tinyint(2) unsigned zerofill, col4 tinyint(4) unsigned zerofill, col5notzerofill        tinyint(5)  
)engine=innodb;

insert into foo values (1,2,3),(11,12,14),(123,123,156),(1234,1234,12756);
select * from foo;

OUTPUT :-
+------+------+-----------------+
| col2 | col4 | col5notzerofill |
+------+------+-----------------+
|   01 | 0002 |               3 |
|   11 | 0012 |              14 |
|  123 | 0123 |             127 |
|  255 | 0255 |             127 |
+------+------+-----------------+
*所以请理解,在Mysql中,显示宽度仅适用于zerofill

*如果使用“不使用零填充”,则该选项无效


如果使用zerofill,mysql将检查显示宽度,如果不指定,mysql将自动为该列指定显示宽度。*

对于浮点和定点类型,M是可以存储的总位数。它在实数中是有效的。以及与标准sql兼容的语法。b/c它在其他sql Server中工作。如果留空,mysql会自动分配它。如果这是你的答案,那么就把它标记为答案。很好的解释@developerCK你只是强调了你答案中的一些要点。