目录
1、整数类型
数据类型 | 范围 | 字节 |
tinyint | 有符号值:-128到127 | 1 |
smallint | ? smallint 或 help smallint 或 \h smallint | 2 |
mediumint | 同上,详情查看文档帮助 | 3 |
int(integer) | 同上,详情查看文档帮助 | 4 |
bigint | 同上,详情查看文档帮助 | 8 |
Bool,boolean | 等价于tinyint(1),0为false,其它为true | 1 |
2、浮点数类型
float[(m,d)]
double[(m,d)
3、定点数类型
decimal(M,D)或dec(M,D) :内部是以字符串形式存储数值。其中,M是数值总位数,D是保留位数。DECIMAL 的存储空间并不是固定的,而由精度值 M 决定,占用 M+2 个字节。
浮点数 VS 定点数
- FLOAT 和 DOUBLE 在不指定精度时,默认会按照实际的精度(由计算机硬件和操作系统决定),DECIMAL 如果不指定精度,默认为(10,0);
- 不论是定点还是浮点类型,如果用户指定的精度超出精度范围,则会四舍五入进行处理;
- 浮点数相对于定点数的优点是在长度一定的情况下,浮点数能够表示更大的范围;缺点是会引起精度问题;
- 在 MySQL 中,定点数以字符串形式存储,在对精度要求比较高的时候(如货币、科学数据),使用 DECIMAL 的类型比较好,另外两个浮点数进行减法和比较运算时也容易出问题,所以在使用浮点数时需要注意,并尽量避免做浮点数比较。
4、字符类型
char(m):固定(定长)m个字符
varchar(m):变长字符串
tinytext
text
mediumtext
longtext
enum('值1','值2','值3',…):枚举类型,只选择其中一个值
set('值1','值2','值3',…):可选择多个值
5、日期时间类型
1)time:时:分:秒
2)date:年-月-日
3)datetime:年-月-日 时:分:秒
4)timestamp:如果需要经常插入或者更新日期为当前系统时间,则通常使用 TIMESTAMP 来表示。
5)year:年
TIMESTAMP 与 DATETIME 除了存储字节和支持的范围不同外,还有一个最大的区别是:
- DATETIME 在存储日期数据时,按实际输入的格式存储,即输入什么就存储什么,与时区无关;
- 而 TIMESTAMP 值的存储是以 UTC(世界标准时间)格式保存的,存储时对当前时区进行转换,检索时再转换回当前时区。即查询时,根据当前时区的不同,显示的时间值是不同的。
提示:如果为一个 DATETIME 或 TIMESTAMP 对象分配一个 DATE 值,结果值的时间部分被设置为 '00:00:00',因此 DATE 值未包含时间信息。如果为一个 DATE 对象分配一个 DATETIME 或 TIMESTAMP 值,结果值的时间部分被删除,因此DATE 值未包含时间信息。
6、二进制类型
1)bit(M)
# bit(M),M的取值范围1-64,默认为1
DROP TABLE IF EXISTS t ;
CREATE TABLE t (
c bit(6)
);
# 如果为 BIT(M) 列分配的值的长度小于 M 位,在值的左边用 0 填充
# 13的二进制为1101,则以下插入值为:001101
INSERT INTO t values (13);
# 错误,64的二进制为1000000,溢出
INSERT INTO t values (64);
2)varbinary(m)
3)binary(m)
BINARY 和 VARBINARY 类型类似于 CHAR 和 VARCHAR,不同的是它们包含二进制字节字符串。
- BINARY 类型的长度是固定的,指定长度后,不足最大长度的,将在它们右边填充 “\0” 补齐,以达到指定长度;
- VARBINARY 类型的长度是可变的,指定好长度之后,长度可以在 0 到最大值之间。
# BINARY 类型的长度是固定的,指定长度后,不足最大长度的,将在它们右边填充 “\0” 补齐,以达到指定长度。
DROP TABLE IF EXISTS t ;
CREATE TABLE t (
c binary(3)
);
# 插入的值为:"a\0\0"
INSERT INTO t SET c='a';
# 验证1
select c,c='a',c='a\0\0' from t ;
# 插入的值为:'ab\0'
INSERT INTO t SET c='ab';
# 验证2
select c,c='ab',c='a\0\0',c='ab\0' from t ;
4)tinyblog(M)
5)blob(M)
6)mediumblog(M)
7)longblog(M)
BLOB 是一个二进制的对象,用来存储可变数量的数据。BLOB 类型分为 4 种:TINYBLOB、BLOB、MEDIUMBLOB 和 LONGBLOB,它们可容纳值的最大长度不同。BLOB 列存储的是二进制字符串(字节字符串),TEXT 列存储的是非进制字符串(字符字符串)。BLOB 列是字符集,并且排序和比较基于列值字节的数值;TEXT 列有一个字符集,并且根据字符集对值进行排序和比较。