mysql的数据类型
在mysql数据库当中,每一个库都是有多张表来组成的,每一个表都是由行和列来组成的。列通常将其称为字段。
所谓建表就是声明列的过程,数据是以文件的形式保存在系统上的。因此,不同的列类型,占用的空间不一样。
选列的原则:够用又不浪费即可
在选择数据类型时考虑如下因素:
1、占据空间
2、储存范围
在声明列的时候,为什么要声明某个字段的数据类型?
数据类型有如下意义:
1、确定该字段的值的类型
2、可以确定该字段所占据的空间
3、可以确定该字段是定长还是变长的
4、该字段如何进行比较以及排序
5、该字段是否能够索引
数据类型大概柯分为:数值型、字符型、日期时间型、枚举型、布尔型
数值型
数值型分为整型和浮点型:
整型
整型包括:TINYINT、SMALLINT、MEDIUINT、INT、BIGINT
整型类型
占据空间大小
默认是否有无符号
有符号储存范围
无符号储存范围
TINYINT
1byte
有
-2^7~2^7-1
0-2^8-1
SMALLINT
2byte
有
-2^15~2^15-1
0-2^16-1
MEDIUINT
3byte
有
-2^23~2^23-1
0-2^24-1
INT
4byte
有
-2^31~2^31-1
0-2^32-1
BIGINT
8byte
有
-2^63~2^63-1
0-2^64-1
浮点型
浮点型:包括单精度和双精度浮点型
float(l.f):其中l表示浮点型的长度,不包含正负符号和小数点。f表示小数点后面数字的位数。
字符型
字符型: 包括CHAR、VARCHAR、BINARY、VARBINARY、TEXT、BLOB等类型
字符类型
是否区分大小写
定长还是 变长
占用空间
实占空间
储存范围
CHAR(n)
不区分
定长
n
n
0-2^8-1bytes
VARCHAR(n)
不区分
变长
n
m
0-2^16-1bytes
TINYTEXT
不区分
变长
0-2^8-1bytes
TEXT
不区分
变长
0-2^16-1bytes
MEDIUMTEXT
不区分
变长
0-2^24-1bytes
LONGTEXT
不区分
变长
0-2^32-1bytes
BINARY
区分
定长
n
n
0-2^8-1bytes
VARBINARY
区分
变长
n
m
0-2^16-1bytes
TINYBLOB
区分
变长
0-2^8-1buyes
BLOB
区分
变长
n
m
0-2^16-1bytes
MEDIUMBLOB
区分
变长
0-2^24-1bytes
LONGBLOB
区分
变长
0-2^32-1bytes
TEXT类型和BLOB类型用于存储超大文本的,因此在表中,存储的并不是真实的数据,而是存储的是指向真实数据的指针。
TEXT类型存储的是文本数据,BLOB类型存储的是超大二进制数据。
BINARY和VARBINARY存储的也是二进制数据。
对于变长型的字符类型来说,一般有1-2个字节用来记录储存的字符数。
对于定长型的字符类型来说,如果储存的宽度不足给定的储存宽度,那么就会在该字段后面补空格
取出该字段的时候,会将后面的空格删除掉。(如果内容后面有空格的话,将会被删掉)。
CHAR和VARCHAR存储时超过n设定时,字符串会被截断或者是不允许插入,这需要根据SQL模型来定,默认SQL模型为空,即超过n后字符串会被截断。
日期时间型
日期时间型:包括DATE、TIME、DATETIME、TIMESTAMP
日期时间型
储存范围
占用空间
日期型DATE
"1000-01-01→9999-12-31"
3bytes
时间型TIME
"-838:59:59"→"838:59:59"
3bytes
日期时间型DATETIME
"1000-01-01 00:00:00"→"9999-12-31 23:59:59"
8bytes
时间戳型TIMESTAMP
是1970-01-01 00:00:00到当前的秒数
4bytes
年型YEAR(2)
"00-99"
1bytes
年型YEAR(4)
"1901-2155"
1bytes
枚举型ENUM:就是列出某个字段的所有可能取得值。储存范围是0-65535bytes。如ENUM('F','M')。
布尔型:只有两种取值,1表示true,0表示false
字段修饰符
在声明字段的时候,可以为这些字段添加额外的修饰符,不同的数据类型,其修饰符也是不一样的,
数据类型
常见的修饰符
整型
UNSIGNED:无符号,表示非负。(UNSIGNED要定义在NULL或NOT NULL之前)
NULL:允许为空
NOT NULL:允许非空
DEFAULT N:定义默认值
AUTO_INCREMNET:自动增长,自动增长的字段必须是整型、非空、非负、唯一键或主键。
浮点型float
UNSIGNED,NULL,NOT NULL,DEFAULT N
字符型(char,varchar和text)
NULL,NOT NULL,DEFAULT 'string'
CHARACTER SET 字符集:设置字符集。
show character set可以查看mysql支持的所有字符集;
show variables like ‘%charac%’可以查看mysql支持的默认字符集。
collation '排序规则':设定排序规则;
show collation可以查看mysql支持的所有排序规则;
字符型(binary、varbinary和blob)
NULL,NOT NULL,DEFAULT(但不适用于BLOB类型)
日期时间型
NULL,NOT NULL,DEFAULT ‘string’
枚举型(ENUM)
NULL,NOT NULL,DEFAULT 'string'
例如:CREATE TABLE test(ID INT UNSIGNED AUTO_INCREMENT NOT NULL PRIMARY KEY, Name CHAR(20))