Mysql的数据类型
- 如何选择数据库的数据类型
- 数据类型尽量简单
- 数据类型尽量的小
- 数据类型的值尽量不为Null
整数数据类型
- 整数数据类型
- TINYINT:数据长度为8位
- SMALLINT:数据长度为16位
- MEDIUMINT:数据长度为24位
- INT:数据长度为32位
- BIGINT:数据长度为64位
- 整数数据类型可选属性:UNSIGNED(表数据非负数,可以将正数的值扩大两倍)
- 整数数据类型的范围为-2^(n-1)至2^(n-1)-1;n为数据长度
实数类型
- 实数数据类型
- 指带有小数部分的数字
- DECIMAL:一般用于高精度计算;拥有比(浮点类型)(FLOAT,DOUBLE)更高的精度,但是性能一般也弱于浮点类型
- DECIMAL(n,m):指允许有n位正数,m位小数
- 一般说浮点不适合精度计算,是因为如果超过对应的长度,会发生截断处理
- 一般为了解决精度问题以及DECIMAL性能问题,采用BIGINT缩放来处理数据计算
字符类型
- 字符数据类型
- VARCHAR:可变长度的字符集
- VARCHAR相比于CHAR节省空间,但是更加只使用自身所需要的数据长度;
- 配置ROE_FORMAT=FIXED属性会导致VARCHAR定长
- VARCHAR需要1至2个额外字节记录字符长度
- 由于VARCHAR是变长的,所以在UPDATE时,需要做额外的工作,对性能具有一定的影响;也有可能会导致碎片
- CHAR:定长字符集
- CHAR类型总会分配固定的空间,CHAR会删除末尾的空格,也会采用空格填充的方式补足长度
- 对于定长类型,其性能优于VARCHAR
BLOB、TEXT数据类型
- BLOB类型:采用二进制存储很大的字符串类型的数据
- TEXT类型:采用字符的方式存储很大的字符串数据
- BLOB、TEXT类型:
- BLOB没有排序规则、字符集;TEXT有排序规则、字符集
- 当BLOB、TEXT很大时,会在行内生成指针指向存储具体值的外部地址
日期、时间类型
- DATETIME:精度为秒,与时区无关,使用8个字节的存储空间,格式为(YYYYMMDDHHMMSS,2008-01-16 22:37:08)
- TIMESTAMP:存储了标准格林兰时间的秒数,使用4个字节的存储空间,与时区有关
- 一般情况下,使用TIMESTAMP作为时间存储的单位,因为空间效率更高
- 如果需要使用比秒更小的时间单位,则可以使用BIGINT、DOUBLE存储时间;也可以使用MariaDB替换MySQL