作为一个数据库设计人员,掌握数据库的数据类型是非常有必要的!
MySQL支持常用的数据类型:数值类型、日期/时间类型和字符串类型
1.数值型
1.1整形:
类型 | 字节 | 最小值 | 最大值 |
---|---|---|---|
TINYINT | 1 | -128 | 127 |
SMALLINT | 2 | -32768 | 32767 |
MEDIUMINT | 3 | -8388608 | 8388607 |
INT | 4 | -2147483648 | 2147483647 |
BIGINT | 8 | -9223372036854775808 | 9223372036854775807 |
表中是MySQL支持的整型,无符号(unsigned)属性可扩展一倍的最大值上限,例如 无符号的tinyint最大值为255最小值为0
MySQL整形还可以设置一个‘width’属性,但这并不表示一个精度,而是告诉客户端要显示多少个字符而已
1.2定点数
定点数也就是Decimal型,指的是小数点位置是固定不变的
Decimal(M,D) M是精度,表示数据的总长度,也就是十进制数据的位数,不包括小数点。
D是标度,表示小数点后面的数字位数。
1.3浮点数
单精度浮点型(Float)使用4个字节,双精度浮点型(Double)使用8个字节
浮点数不规定精度或位数,但会存在误差,应尽量避免对浮点数进行比较。
浮点数比定点数使用空间更少。
2.日期/时间类型
表示日期和时间的类型有:DATETIME、DATE、TIMESTAMP、TIME和YEAR
每个时间类型都有一个有效值范围
当需要同时包含时间个日期的值时,建议使用datetime类型,占8个字节
当只需要日期时,建议使用date类型,占3个字节
TIMESTAMP类型用于在进行insert或update操作是记录日期和时间。占4个字节
datetime和timestamp显示格式是一样的,但是存储方式是不一样的,
对于TIMESTAMP,它把客户端插入的时间从当前时区转化为UTC(世界标准时间)进行存储。查询时,将其又转化为客户端当前时区进行返回。
而对于DATETIME,不做任何改变,原样输入和输出
3.字符串类型
3.1CHAR和VARCHAR类型
char是固定长度的字符串,如char(30)表示字符长度为30,不足的话右边以空格补齐
varchar可变字符串,最大长度为65532,。如varchar(30)表示字符长度为30的可变字符串,字符个数多占用的空间就多,字符个数少占用的空间就少,不会以空格补齐
当检索到char值时,尾部的空格会被自动删除,这是MySQL服务器自动控制的
也可以这么说,char和varchar在检索的时候显示的是一样的,只是存储不一样
3.2 binary和varbinary
类似于char和varchar,不同的是它们包含的是二进制字符串,也就是说他们包含的是字节字符串而不是字符字符串,他们的长度是字节长度。
3.3 BLOB和TEXT
blob是一个二进制大对象,大多数情况下可以视为能够存储足够大数据的varbinary,同样也可以将text视为varchar类型
但是blob和text可能会导致严重的性能问题