一、MySQL的数据类型
主要包括以下五大类:
整数类型:BIT、BOOL、TINY INT、SMALL INT、MEDIUM INT、 INT、 BIG INT
浮点数类型:FLOAT、DOUBLE、DECIMAL
字符串类型:CHAR、VARCHAR、TINY TEXT、TEXT、MEDIUM TEXT、LONGTEXT、TINY BLOB、BLOB、MEDIUM BLOB、LONG BLOB
日期类型:Date、DateTime、TimeStamp、Time、Year
其他数据类型:BINARY、VARBINARY、ENUM、SET、Geometry、Point、MultiPoint、LineString、MultiLineString、Polygon、GeometryCollection等
二、MYSQL数据类型的长度和范围
各数据类型及字节长度一览表:
数据类型 |
字节长度 |
范围或用法 |
Bit |
1 |
无符号[0,255],有符号[-128,127],天缘博客备注:BIT和BOOL布尔型都占用1字节 |
TinyInt |
1 |
整数[0,255] |
SmallInt |
2 |
无符号[0,65535],有符号[-32768,32767] |
MediumInt |
3 |
无符号[0,2^24-1],有符号[-2^23,2^23-1]] |
Int |
4 |
无符号[0,2^32-1],有符号[-2^31,2^31-1] |
BigInt |
8 |
无符号[0,2^64-1],有符号[-2^63 ,2^63 -1] |
Float(M,D) |
4 |
单精度浮点数。天缘博客提醒这里的D是精度,如果D<=24则为默认的FLOAT,如果D>24则会自动被转换为DOUBLE型。 |
Double(M,D) |
8 |
双精度浮点。 |
Decimal(M,D) |
M+1或M+2 |
未打包的浮点数,用法类似于FLOAT和DOUBLE,天缘博客提醒您如果在ASP中使用到Decimal数据类型,直接从数据库读出来的Decimal可能需要先转换成Float或Double类型后再进行运算。 |
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) |
M |
定长字符串。 |
VarChar(M) |
M |
变长字符串,要求M<=255 |
Binary(M) |
M |
类似Char的二进制存储,特点是插入定长不足补0 |
VarBinary(M) |
M |
类似VarChar的变长二进制存储,特点是定长不补0 |
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个不同的值 |
Geometry |
|
|
Point |
|
|
LineString |
|
|
Polygon |
|
|
MultiPoint |
|
|
MultiLineString |
|
|
MultiPolygon |
|
|
GeometryCollection |
|
|
三、使用建议
1、在指定数据类型的时候一般是采用从小原则,比如能用TINY INT的最好就不用INT,能用FLOAT类型的就不用DOUBLE类型,这样会对MYSQL在运行效率上提高很大,尤其是大数据量测试条件下。
2、不需要把数据表设计的太过复杂,功能模块上区分或许对于后期的维护更为方便,慎重出现大杂烩数据表
3、数据表和字段的起名字也是一门学问
4、设计数据表结构之前请先想象一下是你的房间,或许结果会更加合理、高效
5、数据库的最后设计结果一定是效率和可扩展性的折中,偏向任何一方都是欠妥的