MySQL学习历程(三):数据类型

1 所有数据类型

  1. 数值类型:整数类型TINYINT SMALLINT MEDIUMINT INT BIGINT;浮点小数类型FLOAT DOUBLE;定点小数DECIMAL。
  2. 日期时间类型:YEAR TIME DATE DATETIME TIMESTAMP。
  3. 字符串类型:CHAR VARCHAR BINARY VARBINARY BLOB TEXT ENUM SET。

2 数值类型

2.1 整数类型

类型名 说明 占用空间 有符号表示范围 无符号表示范围
TINYINT 特别小的整数 1个字节 -128~127 0~255
SMALLINT 小整数 2个字节 -32768~32767 0~65535
MEDIUMINT 中等大小的整数 3个字节 -(2^23)~(2^23 - 1) 0~(2^24 - 1)
INT 整数 4个字节 -(2^31)~(2^31 - 1) 0~(2^32 - 1)
BIGINT 大整数 8个字节 -(2^63)~(2^63 - 1) 0~(2^64 - 1)
CREATE TABLE table_name( id INT(10), name VARCHAR(20) );

此处的INT(10)表示的是显示宽度,显示时只显示10位,不足的以空格代替。但是如果有一条记录数据范围超过了10位,依然能够正确显示。

2.2 浮点小数类型和定点小数类型

类型名称 说明 占用空间
FLOAT 单精度浮点数 4个字节
DOUBLE 双精度浮点数 8个字节
DECIMAL(M, D) 定点小数 M+2个字节

DECIMAL(M, D)是定点小数类型:
1. M是数字的最大数(精度)。其范围为1~65(在较旧的MySQL版本中,允许的范围是1~254),M 的默认值是10。
2. D是小数点右侧数字的数目(标度)。其范围是0~30,但不得超过M。
3. 如DECIMAL(5,2) 的最大值为9999.99,因为有7个字节可用。

3 日期和时间类型

类型名称 日期格式 日期范围 占用空间
YEAR YYYY 1901~2155 1个字节
TIME HH:MM:SS -838:59:59~838:59:59 3个字节
DATE YYYY-MM-DD 1000-01-01~9999-12-3 3个字节
DATETIME YYYY-MM-DD HH:MM:SS 1000… ~ 9999… 8个字节
TIMESTAMP YYYY-MM-DD HH:MM:SS 1970… ~ 2018… 4个字节

4 字符串类型

4.1 非二进制字符串类型

类型名称 说明 存储需求
CHAR(M) 固定长度非二进制字符串 M个字节,1 <= M <= 255
VARCHAR(M) 变长非二进制字符串 L+1个字节,L <= M && 1 <= M <= 255
TINYTEXT 非常短的非二进制字符串 L+1个字节,L < 2^8
TEXT 短的非二进制字符串 L+2个字节,L < 2^16
MEDIUMTEXT 中等长度非二进制字符串 L+3个字节,L < 2^24
LONGTEXT 长的非二进制字符串 L+4个字节,L < 2 ^ 32
ENUM 枚举 1或2个字节
SET 一个设置,字符串对象可以有零个或多个SET成员 1,2,3,4或8个字节

4.2 二进制类型字符串

类型名称 说明 存储需求
BIT(M) 比特位 大约(M+7)/8个字节
BINARY(M) 固定长度二进制串 M个字节
VARBINARY(M) 可变长度二进制串 M+1个字节
TINYBLOB 非常短的BLOB L+1个字节,L < 2^8
BLOB 短的BLOB L+2个字节,L < 2^16
MEDIUMBLOB 中等长度BLOB L+3个字节,L < 2^24
LONGBLOB 长的BLOB L+4个字节,L < 2 ^ 32

BIN()函数将数字转化为二进制
BLOB是二进制串,用来存储音频、图片等二进制数据;TEXT是非二进制字符串,用来存放纯文本文件,虽然存储文本文件本质上也是存储二进制,但是TEXT会有一个字符集,会转化为可显示字符。

注意点1:浮点数和定点数

浮点数的优势是可以表示更大的范围,更灵活;缺点是容易产生误差,浮点数之间进行比较和减法操作容易出现问题。
定点数确定了小数点位置,不容易产生误差,一般用于对精度要求比较高的数据。

注意点2:CHAR和VARCHAR

CHAR是固定长度,优点是处理速度快,缺点是浪费空间;
VARCHAR是可变长度,优点是节省空间,缺点是处理速度慢。
对于MyISAM存储引擎,最好使用固定长度的数据列,以使整个数据表静态化,从而缩短数据检索时间,用空间换时间;
对于InnoDB存储引擎,推荐使用VARCHAR,因为InnoDB数据表的存储格式不分固定长度和可变长度,所以在检索时间上固定长度和可变长度差不多,所以,使用VARCHAR就比较节省空间了。

你可能感兴趣的:(mysql,数据库)