MYSQL

来源:互联网 发布:usb端口上的电涌win10 编辑:程序博客网 时间:2024/06/03 20:52

一、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、数据库的最后设计结果一定是效率和可扩展性的折中,偏向任何一方都是欠妥的


MySQL 数据类型中的 integer types有点奇怪。你可能会见到诸如:int(3)int(4)int(8)之类的 int 数据类型。刚接触 MySQL的时候,我还以为 int(3) 占用的存储空间比 int(4)要小, int(4) 占用的存储空间比 int(8)小。后来,参看 MySQL 手册,发现自己理解错了。

int(M): M indicates the maximum display width for integer types.

integer 数据类型中,M表示最大显示宽度。

原来,在 int(M) 中,M的值跟 int(M) 所占多少存储空间并无任何关系。 int(3)int(4)int(8)在磁盘上都是占用 4 btyes 的存储空间。说白了,除了显示给用户的方式有点不同外,int(M) int 数据类型是相同的。

另外,int(M) 只有跟 zerofill结合起来,才能使我们清楚的看到不同之处。

mysql> drop table if exists t;

mysql> create table t(id int zerofill);

mysql> insert into t(id) values(10);

 

mysql> select * from t;

+------------+

| id        |

+------------+

| 0000000010 |

+------------+

 

mysql> alter table t change column id id int(3) zerofill;

 

mysql> select * from t;

+------+

| id   |

+------+

|  010 |

+------+

 

mysql>

mysql> alter table t change column id id int(4) zerofill;

 

mysql> select * from t;

+------+

| id   |

+------+

| 0010 |

+------+

 

mysql>

mysql> insert into t(id) values(1000000);

 

mysql> select * from t;

+---------+

| id      |

+---------+

|    0010 |

| 1000000 |

+---------+

从上面的测试可以看出,“(M)”指定了 int型数值显示的宽度,如果字段数据类型是 int(4),则:当显示数值 10时,在左边要补上“00”;当显示数值 100是,在左边要补上“0”;当显示数值 1000000时,已经超过了指定宽度“(4)”,因此按原样输出。

在使用 MySQL 数据类型中的整数类型(tinyint, smallint, mediumint, int/integer, bigint)时,非特殊需求下,在数据类型后加个“(M)”,我想不出有何意义。

另外,在 MySQL 数据类型中,integer int 同义。到底使用哪个,自己看着办吧。

 

 

原创粉丝点击