mysql数据库中数据类型的长度
mysql数据库中数据类型的长度
在mysql中新建数据表的时候会有长度⼀说,其实⽤建表语句建数据表的时候也有涉及
例如:
CREATE TABLE user(
uid int(4),
name varchar(255),
passward varchar(20)
birthday data
)
不知道你有没有注意这个数据类型后⾯的括号有什么⽞机,今天看了《Mysql 5.6 从零开始学》这本书,算是把这个地⽅搞清楚了。
括号⾥的数字叫数据的宽度,我们不能⼀概⽽论,因为不同的数据类型对宽度的处理也不⼀样:
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
mysql 各数据类型的⼤⼩及长度
数字型
类型⼤⼩范围(有符号)范围(⽆符号)⽤途
TINYINT  1 字节(-128,127)(0,255)⼩整数值
SMALLINT  2 字节(-32 768,32 767)(0,65 535)⼤整数值
MEDIUMINT  3 字节(-8 388 608,8 388 607)(0,16 777 215)⼤整数值
INT或INTEGER 4 字节(-2 147 483 648,2 147 483 647)(0,4 294 967 295)
⼤整
数值
BIGINT8 字节(-9 233 372 036 854 775 808,9 223 372 036 854 775
807)
(0,18 446 744 073 709 551
615)
极⼤
整数
FLOAT  4 字节(-3.402 823 466 E+38,1.175 494 351 E-38),0,(1.175 4940,(1.175 494 351 E-
单精
度 浮
FLOAT  4 字节
351 E-38,3.402 823 466 351 E+38)38,3.402 823 466 E+38)点数
DOUBLE8 字节(1.797 693 134 862 315 7 E+308,2.225 073 858 507 201
4 E-308),0,(2.22
5 073 858 507 201 4 E-308,1.797 693
134 862 315 7 E+308)
0,(2.225 073 858 507 201 4
E-308,1.797 693 134 862
315 7 E+308)
双精
度 浮
点数
DECIMAL
对DECIMAL(M,D)
,如果M>D,为M+2
否则为D+2
依赖于M和D的值依赖于M和D的值
⼩数
类型⼤⼩范围(有符号)范围(⽆符号)⽤途
字符类型
CHAR0-255字节定长字符串
VARCHAR0-255字节变长字符串
TINYBLOB0-255字节不超过 255 个字符的⼆进制字符串
TINYTEXT0-255字节短⽂本字符串
BLOB0-65 535字节⼆进制形式的长⽂本数据
TEXT0-65 535字节长⽂本数据MEDIUMBLOB0-16 777 215字节⼆进制形式的中等长度⽂本数据
MEDIUMTEXT0-16 777 215字节中等长度⽂本数据
LOGNGBLOB0-4 294 967 295字节⼆进制形式的极⼤⽂本数据
LONGTEXT0-4 294 967 295字节极⼤⽂本数据
varchar2最大长度
枚举集合
ENUM (最多65535个成员) 64KB
SET (最多64个成员) 64KB
时间类型
类型⼤⼩ (字节)范围格式⽤途
DATE31000-01-01/9999-12-31YYYY-MM-DD⽇期值
TIME3‘-838:59:59’/‘838:59:59’HH:MM:SS时间值或持续时间YEAR11901/2155YYYY年份值DATETIME81000-01-01 00:00:00/9999-12-31 23:59:59YYYY-MM-DD HH:MM:SS混合⽇期和时间值TIMESTAMP81970-01-01 00:00:00/2037 年某时YYYYMMDD HHMMSS混合⽇期和时间值,时间戳所以MySQL中int长度经常定义为11位,包含所有范围。