Hom's Blog


MySQL:类型长度:长度/值

在phpMyAdmin里面, 设置一个int型, 出来是显示长度是INT(11). 咦, 不是说这个INT是四字节嘛.怎么是11了??

去查看一下资料, 原来这个11指的是最大显示宽度. 就是说该列显示出来的长度. INT四字节范围是[-2147483648,2147483647], 这个最大值长度是10, 加上正负号, 所以就正好是11!

那么我们设置1是不是就不能储存10呢? 答案是否定的. 很混淆对吧..

MySQL说明里有 这个长度/值用”M”来表示的, M指示最大显示宽度。最大有效显示宽度是255。显示宽度与存储大小或类型包含的值的范围无关.

那么究竟这个M有啥用呢..在phpMyAdmin里面可以设置不足为补0 (属性->UNSIGNED ZEROFILL),这个功能是, 长度不够时往左侧补0. 明白了吧, 如果M设置是5, 那么数是1时, 那么显示就是00001. 换句话说, 这个长度/值显示的长度, 和实际储存占用大小无关. 这个显示的长度对于CAT, JOIN等操作时可能会存在影响. 所以还是最好设置到合适的长度. 对于浮点型同理.

但这个长度对于字符串型的情况就不同了, 设置的长度就和占用的长度相关了, CHAR和VARCHAR前者是实际需要占用的(会更快), 后者是可变长度的最大值(可能更省, 但更慢, 不适合做索引).

下表是实际MySQL支持的整数及范围 (BOOLEAN 实际是TINYINT(1)).

类型 字节 最小值 最大值 默认长度
TINYINT 1 -128 127 4
UNSIGNED   0 255 3
SMALLINT 2 -32768 32767 6
UNSIGNED   0 65535 5
MEDIUMINT 3 -8388608 8388607 8
UNSIGNED   0 16777215 8
INT 4 -2147483648 2147483647 11
UNSIGNED   0 4294967295 10
BIGINT 8 -9223372036854775808 9223372036854775807 20
UNSIGNED   0 18446744073709551615 20


◆ 本文地址: http://platinhom.github.io/2016/01/27/mysql-typelength/, 转载请注明 ◆

前一篇: FileZilla搭建ftp服务器
后一篇: MySQL:Select读取数据


Contact: Hom / 已阅读()
Source 类别: IT  标签: SQL