问题由来
学习过程中对varChar(20),int(7)括号中长度限定的不理解,查找资料后归纳总结,感谢以下两处博主的讲解
总结
在utf-8字符集的编码下,mysql的varchar数据类型,长度为10,可以存放10个字符,那么它能放10个汉字(超过了不会报错,但只会存储前10个),10个字母(超过了不会报错,但只会存储前10个),10个数字(超过了不会报错,但只会存储前10个)。并且空格也算一个。
int数据类型最大值为2147483647,若存的值超过了这个最大值,那么实际保存在数据库中的值也为2147483647。指定int的长度没什么意义,用它默认的长度就行,因为就算指定长度为6,它也能保存10位数的值,但它所保存的值还是不能超过2147483647。
————————————————
版权声明:本文为CSDN博主「站在风口哈气」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/abc286229825/article/details/78940817
举例论证提问:
mysql的字段,unsigned int(3), 和unsinged int(6), 能存储的数值范围是否相同。如果不同,分别是多大?
回答:
不同,int(3)最多显示3位无符号整体,int(6)最多显示6位无符号数。
如果你的答案和上面的一致,恭喜你和我犯了一样的错误。
真实情况:
我们建立下面这张表:
CREATE TABLE `test` (
`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`i1` int(3) unsigned zerofill DEFAULT NULL,
`i2` int(6) unsigned zerofill DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8
插入一些数据后
发现,无论是int(3), int(6), 都可以显示6位以上的整数。但是,当数字不足3位或6位时,前面会用0补齐。
查下手册,解释是这样的:
MySQL还支持选择在该类型关键字后面的括号内指定整数值的显示宽度(例如,INT(4))。该可选显示宽度规定用于显示宽度小于指定的列宽度的值时从左侧填满宽度。显示宽度并不限制可以在列内保存的值的范围,也不限制超过列的指定宽度的值的显示。
也就是说,int的长度并不影响数据的存储精度,长度只和显示有关,为了让大家看的更清楚,我们在上面例子的建表语句中,使用了zerofill。
结论:
无论是unsigned int(3)或 unsiend int(6),存储的都是4字节无符号整数, 也就是0~2^32。
————————————————
版权声明:本文为CSDN博主「ball球」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/qmhball/article/details/51544484