数值类
整数型
数据类型 | 说明 | 字节数 |
---|---|---|
TINYINT | -128~127 | 1 |
SMALLINT | -32768~32767 | 2 |
MEDIUMINT | -8388608~8388607 | 3 |
INT | -2147483648~2147483647 | 4 |
BIGINT | -9223372036854775808~9223372036854775807 | 8 |
小数型
数据类型 | 说明 | 字节数 |
---|---|---|
FLOAT | 单精度小数 | 4 |
DOUBLE | 双精度小数 | 8 |
DECIMAL | 精确计算时使用的数据类型 | 根据精度确定 |
注意事项
- 指定精度时,如果插入值的精度高于实际定义的精度,系统会自动进行四舍五入处理,使值的精度达到要求。
- 当不指定精度时,Float、Double默认会保存实际精度,而Decimal默认是整数;
日期类
数据类型 | 说明 |
---|---|
DATE类型: | 支持的范围为’1000-01-01’到’9999-12-31’ |
TIME类型: | 支持的范围是’-838:59:59’到’838:59:59’ |
DATETIME类型 | 支持的范围是’1000-01-01 00:00:00’到’9999-12-31 23:59:59’ |
TIMESTAMP类型: | 时间戳,用于INSERT或UPDATE操作时自动获得当前时间 |
YAER类型: | 支持范围是1901~2155 |
注意事项
- 在MySQL中除了timestamp 类型允许有默认值外,其他时间类型都不能有默认值,不然会报错;
- TimeStamp使用Current_TimeStamp()而DateTime使用NOW(来获取当前时间);
- Datetime存储的时间与时区无关,Timestamp存储的时间及显示的时间都依赖于当前时区;
字符串类
数据类型 | 说明 |
---|---|
char: | 固定长度字符串,需要设定长度值,不足设定值,则右侧自动填满空格;最大255个字符 |
varchar: | 可变长字符串需要设定长度值,最大65532个字节 |
tinytext | 用于存储普通文本,-1字节的可变长度字符串 |
text: | 用于存储普通文本,不受行的最大长度的限制,216-1字节的可变长度字符串 |
mediuntext | 用于存储普通文本,224-1字节的可变长度字符串 |
longtext | 用于存储普通文本,264-1字节的可变长度字符 |
注意事项:
- CHAR 和 VARCHAR 的区别:
1.字符串末尾空格的处理方式不同。
2.CHAR列的长度固定为创建表时声明的长度,所以效率比VARCHAR要高,但会造成一定的空间浪费,VARCHAR 与之相反
二进制类
数据类型 | 说明 |
---|---|
binary: | 定长二进制字符串,应该设定长度值,按“二进制字节”保存存字符数据,最大255个字节,无编码问题 |
varbinary: | 变长二进制字符串,需要设定长度值,按“二进制字节”存字符数据,最大65532个字节,无编码问题 |
TINYBLOB | 可变长二进制数据,最多255个字节 |
BLOB | 可变长二进制数据,最多216-1个字节 |
MEDIUMBLOB | 可变长二进制数据,最多224-1个字节 |
LONGBLOB | 可变长二进制数据,最多232-1个字节 |
注意事项:
- BINARY、VARBINARY和 BLOB可以理解为是CHAR、VARCHAR和TEXT的二进制版本
- BINARY和VARBINARY:两者唯一的差别在于BINARY当长度不够时会补“ ”。
- BLOB类型是一种特殊的二进制类型。BLOB可以存储数据量很大的二进制数据,如图片,视频等。不同BLOB之间的区别也只是最大长度不同。
枚举类
数据类型 | 说明 |
---|---|
ENUM(var1,var2,var3,…) | 单选可能的枚举型 |
SET(var1,var2,var3,…) | 多选可能的枚举型 |
数据类型选择的个人建议
- 整型:根据要显示的最大值决定;
- 浮点型:要显示小数。如果要精确到小数点后10位,就选择DOUBLE,而不应该选择FLOAT。同时,浮点数在存储过程中会出现精度丢失的问题。DECIMAL精度较高,浮点数会出现误差,如果精度较高,则应选择定点数DECIMAL;
- 字符串型:定长与变长的区别,CHAR类型占用空间比较大,但是处理速度比VARCHAR快,如果长度变化不大,最好选择CHAR类型。对于长度不确定的,最好选择VARCHAR;
- 时间:根据实际情况决定,如果需要显示的时间与时区对应,就应该选择TIMESTAMP;
- ENUM类型和SET类型:长度不同,ENUM类型最多可以由65535个成员,而SET类型最多只能包含64个成员。且ENUM只能单选,而SET类型可以多选;
- TEXT类型和BLOB类型:TEXT只能存储字符数据,而BLOB可以存储二进制数据。如果是纯文本,适合TEXT,,但是文本数据不是必要情况下,最好选择VarCharl类型。如果是图片,视频等适合存二进制,但通常图片视频等的储存是将文件储存在服务器,而在数据库记录文件地址来实现的;