mysql bigint(20)中的20到底代表的是什么?
如mysql介绍文档所知,mysql的数据类型及具体的存储长处如下表所示
数据类型 | 存储长度 |
TINYINT | -128 - 127 |
TINYINT UNSIGNED | 0 - 255 |
SMALLINT | -32768 - 32767 |
SMALLINT UNSIGNED | 0 - 65535 |
MEDIUMINT | -8388608 - 8388607 |
MEDIUMINT UNSIGNED |
0 - 16777215 |
INT 或 INTEGER | -2147483648 - 2147483647 |
INT UNSIGNED 或 INTEGER UNSIGNED | 0 - 4294967295 |
BIGINT | -9223372036854775808 - 9223372036854775807 |
BIGINT UNSIGNED | 0 - 18446744073709551615 |
FLOAT | -3.402823466E+38 - -1.175494351E-38,0,1.175494351E-38 - 3.402823466E+38 |
DOUBLE 或 DOUBLE PRECISION 或 REAL | 1.7976931348623157E+308 - -2.2250738585072014E-308,0,2.2250738585072014E-308 - 1.7976931348623157E+308 |
DECIMAL[(M,[D])] 或 NUMERIC(M,D) | 由M(整个数字的长度,包括小数点,小数点左边的位数,小数点右边的位数,但不包括负号)和D(小数点右边的位数)来决定,M缺省为10,D缺省为0 |
DATE | 1000-01-01 - 9999-12-31 |
DATETIME | 1000-01-01 00:00:00 - 9999-12-31 23:59:59 |
TIMESTAMP | 1970-01-01 00:00:00 - 203年的某一天 |
TIME | -838:59:59' to 838:59:59 |
YEAR[(2|4)] | 缺省为4位格式,4位格式取值范围为1901 - 2155,0000,2位格式取值范围为70-69(1970-2069) |
CHAR(M) [BINARY] 或 NCHAR(M) [BINARY] | M的范围为1 - 255,如果没有BINARY项,则不分大小写,NCHAR表示使用缺省的字符集.在数据库中以空格补足,但在取出来时末尾的空格将自动去掉. |
[NATIONAL] VARCHAR(M) [BINARY] | M的范围为1 - 255.在数据库中末尾的空格将自动去掉. |
TINYBLOB 或 TINYTEXT | 255(2^8-1)个字符 |
BLOB 或 TEXT | 65535(2^16-1)个字符 |
MEDIUMBLOB 或 MEDIUMTEXT | 16777215 (2^24-1)个字符 |
LONGBLOB 或 LONGTEXT | 4294967295 (2^32-1)个字符 |
ENUM('value1','value2',...) | 可以总共有65535个不同的值 |
SET('value1','value2',...) | 最多有64个成员 |
在日常工作中,对于mysql定义语句经常写的bigint(20)这个其中的20到底是什么含义,比较容易和数据类型真实存储的数据大小混淆,下面介绍,这里的20到底是什么
括号里的数字叫数据的宽度,不同的数据类型对宽度的处理也不一样:
1、整数类型,这里显示的宽度和数据类型的取值范围是没有任何关系的,显示宽度只是指明Mysql最大可能显示的数字个数,数值的位数小于指定的宽度时会由空格填充;如果插入了大于显示宽度的值,只要该值不超过该类型的取值范围,数值依然可以插入,而且能够显示出来。例如上面的udi,显示的宽度是4,但是我向uid中插入100001,也是可以的,保存和显示的都会是100001;如果你不设置宽度,系统将添加默认的宽度tinyint(4),smallint(6),mediumint(9),int(11),bigint(20),这些默认的宽度是跟该类型的取值范围长度相关。
2、字符串类型,字符串类型这个宽度才真的用上了。不管是char还是varchar,宽度都定义了字符串的最大长度;例如上面的 password varchar(20),如果你输入了一个21个字符的密码,那么保存和显示的只会是前20个字符,你将丢失一个字符信息,char同理。由于varchar是变长存储的,所以实际开发中我们一般都把varchar的宽度设为最长255,反正你没用完它也不会浪费空间。
3、浮点和日期等数据类型对数据的宽度没有要求,一般也不设置,默认是0。
例如:
存储数字 | 存储空间 | 实际显示宽度 | 实际显示 | ||
tinyint(3) | 33 | 1 | 3 | 033 | |
tinyint(10) | 33 | 1 | 10 | 0000000033 | |
bigint(10) | 666 | 8 | 10 | 0000000666 | |
bigint(20) | 666 | 8 | 20 | 00000000000000000666 |
posted on 2020-11-19 17:47 1450811640 阅读(12965) 评论(0) 编辑 收藏 举报
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· .NET10 - 预览版1新功能体验(一)