每一个常量、变量和参数都有数据类型,它用来指定一定的存储格式、约束和有效范围
MySQL提供了多种数据类型,主要包括数值类型(整数和浮点数)、字符串类型、日期和时间类型
整数类型:bit、bool、tinyint、smallint、mediumint、 int、bitint
浮点数类型:Float、Double、Decimal
字符串类型:Char、VarChar、Tiny Text、Text、Medium Text、Long Text、Tiny Blob、Blob、Medium Blob、Long Blob
日期类型:Date、DateTime、TimeStamp、Time、Year
其他数据类型:Binary、VarBinary、Enum、Set、Geometry、Point、MultiPoint、LineString、MultiLineString、Polygon、GeometryCollection等
一、数据类型和长度
整数类型 | 字节 | 最小值 | 最大值 |
---|---|---|---|
tinyint | 1 | 0 | 255 |
smallint | 2 | 无符号0,有符号-32768 | 65535(2^16-1),有符号32767(2^15-1 |
mediumint | 3 | 无符号0,有符号-2^23, | 无符号2^24-1,有符号2^23-1 |
int、integer | 4 | 无符号0,有符号-2^31-1 | 无符号2^32-1,有符号2^31-1 |
bitint | 8 | 无符号0,有符号-2^63 | 无符号2^64-1,有符号2^63 -1 |
Bit | 1 | 无符号0,,有符号-128 | 无符号255,有符号127 |
Bool | 1 | 无符号0,,有符号-128 | 无符号255,有符号127 |
Float(M,D) | 4 | 如果D<=24则为默认的FLOAT,如果D>24则会自动被转换为DOUBLE型 | |
Double(M,D) | 8 | ||
Decimal(M,D) | M+1或M+2 | ||
Date | 3 | 以YYYY-MM-DD的格式显示,比如:2009-07-19 | |
Date Time | 8 | 以YYYY-MM-DD HH:MM:SS的格式显示,比如:2009-07-19 11:22:30 | |
TimeStamp | 4 | 以YYYY-MM-DD的格式显示,比如:2009-07-19 | |
Time | 3 | 以HH:MM:SS的格式显示。比如:11:22:30 | |
Year | 1 | 以YYYY的格式显示。比如:2009 | |
Char(M) | |||
VarChar(M) | |||
Binary(M) | |||
VarBinary(M) | |||
Tiny Text | Max:255 | ||
Text | Max:64K | ||
Medium Text | Max:16M | ||
Long Text | Max:4G | ||
TinyBlob | Max:255 | ||
Blob | Max:64K | ||
MediumBlob | Max:16M | ||
LongBlob | Max:4G | ||
Enum | 1或2 | 最大可达65535个不同的枚举值 | |
Set | 可达8 | 最大可达64个不同的值 |
二、数据类型选择原则
1、在指定数据类型的时候一般是采用从小原则,这样会对MYSQL在运行效率上提高很大,尤其是数据量大的情况下
2、表的设计要结合业务,要考虑业务会有哪些查询需求,或者统计需求,让业务的查询尽量只通过查询一个表就能满足需求,而不要关联多个表才能得到结果,单表查询的效率要高于多表关联查询的效率
3、数据表和字段的命名最好能见名知意,每个字段和表都要有注释,这样方便DBA后期的维护
4、数据库的设计要留有可扩展性,要考虑到后期业务的发展