MySQL的数据类型大概可以分为:数值类型,时间/日期类型,字符串类型
1.数值类型
mysql的数值类型可以分为:整形和实数。MySQL支持确认精度的值(定点数)和近似精度的值(浮点数),确认精度的类型有DECIMAL类型,近似精度的数值类型有float和double
- 整型 主要有TINYINT,SMALLINT,MEDIUMINT,INT,BINGINT等
类型 | 存储范围-有符号 | 存储范围-无符号 | 字节 |
---|---|---|---|
TINYINT | -128 -- 127 | 0-255 | 1 |
SMALLINT | -2^15 -- 2^15-1 | 0-65535 | 2 |
MEDIUMINT | -2^23 -- 2^23 | 0-2^24-1 | 3 |
INT | -2^31 -- 2^31 | 0-2^32-1 | 4 |
BIGINT | -2^63 -- 2^63 | 0-2^64-1 | 8 |
因为mysql内部只支持到秒级别的精度,所以可以用bigint来存储精度到毫秒的时间戳。当我们在设计数据库的时候要充分考虑保留足够的范围来应对未来的数据增长需求。
- DECIMAL和NUMERIC(定点数)
所谓定点数就是指数据的小数点的位置是不变的。也就是说小数点后面的位数是固定的,例如DECIMAL(M,D),M即为精度长度不包括小数点后的,D就是标度,指小数点后面的固定长度
- FLOAT和DOUBLE(浮点型)
对于浮点类型,单精度使用4个字节而双精度使用8个字节,浮点数可以表示更大数据类型,为了保证最大可能的移植性,FLOAT后面尽量不要规定精度和标度,浮点数比定点数使用的空间更少,弹性更大,所以尽量选择浮点。除非货币数据
2.时间日期类型
主要有DATE,TIME,DATETIME,TIMESTAMP,YEAR类型
- 当同时需要日期+时间的时候选择datetime类型,占8个字节
- 当只需要日期的时候选择date类型,占3个字节
- 当只需要时间的时候选择time类型,占3个字节
- year占1个字节
- TIMESTAMP用于insert、update记录日期和时间 占8个字节
3.字符串类型
主要有char,varchar,binary,varbinary,blob,text,enum和set
- char和varchar的区别
char和varchar的数据类型相似,但是他们保存和检索数据的方式不同。char是固定字符串长度。长度范围为0-255个字符。char类型适合存储数据长度差不多的值,例如MD5值。varchar类型是可变长度的字符串。长度范围是0-65535,