1、tinyint

带符号的范围是-128到127。无符号的范围是0到255。inyint占用1字节的存储空间,即8位(bit)。

2、char [ ( n ) ]

固定长度,非 Unicode 字符数据,长度为 n 个字节。n 的取值范围为 1 至 8,000,存储大小是 n 个字节。

3、varchar [ ( n | max ) ]

可变长度,非 Unicode 字符数据。n 的取值范围为 1 至 8,000。max

指示最大存储大小是 2^31-1 个字节。存储大小是输入数据的实际长度加 2 个字节。所输入数据的长度可以为 0

个字符。SQL-2003 中的 varchar 就是 char varying 或 character varying。

char (13)长度固定, 如'www.jb51.net' 存储需要空间 12个字符

varchar(13) 可变长 如'www.jb51.net' 需要存储空间 13字符,

从上面可以看得出来char

长度是固定的,不管你存储的数据是多少他都会都固定的长度。而varchar则处可变长度但他要在总长度上加1字符,这个用来存储位置。所以实际应用中用户可以根据自己的数据类型来做。

从上面可以看出来,由于某种原因char 固定长度,所以在处理速度上要比varchar快速很多,但是对费存储空间,所以对存储不大,但在速度上有要求的可以使用char类型,反之可以用varchar类型来实例。

4、bigint

-2^63

(-9,223,372,036,854,775,808) 到 2^63-1

(9,223,372,036,854,775,807)

8 字节

5、int

-2^31 (-2,147,483,648) 到

2^31-1 (2,147,483,647)

4 字节,主要整数数据类型

6、smallint

-2^15 (-32,768) 到 2^15-1

(32,767)

2 字节

7、ntext

长度可变的 Unicode 数据,最大长度为 2^30 - 1 (1,073,741,823)

个字符。存储大小是所输入字符个数的两倍(以字节为单位)。ntext 的 SQL 2003 同义词为 national

text。

8、datetime

表示某天的日期和时间,范围是1753 年 1 月 1 日到 9999 年 12 月 31 日,精确度为3.33 毫秒

用两个 4 字节的整数内部存储 datetime 数据类型的值。 第一个 4 字节存储“基础日期”(即 1900 年 1 月 1

日)之前或之后的天数。基础日期是系统参照日期。另外一个 4 字节存储天的时间(以午夜后经过的毫秒数表示)。

datetime

1、8个字节储存(8 bytes storage)

2、实际格式储存(Just stores what you

have stored and retrieves thesamething which you have

stored.)

3、与时区无关(It has nothing to deal

with the TIMEZONEandConversion.)

9、timestamp

timestamp列的显示格式与datetime列相同,换句话说,显示宽度固定在19个字符,并且格式为YYYY-MM-DD

HH:MM:SS。以"YYYY-MM-DDHH:MM:SS"格式检索和显示datetime值。支持的范围为"1000-01-01

00:00:00" 到 "9999-12-31 23:59:59"。timestamp值不能早于1970或晚于2037

1、4个字节储存(Time stamp value is stored in 4

bytes)

2、值以UTC格式保存( it stores the

number of milliseconds)

3、时区转化,存储时对当前的时区进行转换,检索时再转换回当前的时区。

MySQL中尽量使用datetime,而不要使用timestamp粗看起来,在MySQL中timestamp和datetime都能保存年、月、日、时、分、秒,只是timestamp可以保存1秒以下的时间。

但不仅仅是这样,timestamp是有限制范围的,从1970年1月2日到2037年。虽然这个限制看起来无所谓,因为一般用不到。

但是,如果一旦有超过此范围的值insert或者update,MySQL并不会报错,并把一个年月日时分秒都是0的值放到表中。这一点在mysql文档中是有的,但是很可能未被注意到。

由于MySQL不报错,因此应用程序并不知道。当再把此值查出来的时候,就导致应用程序出现意想不到的错误。

因此,除非必须,否则在MySQL中尽量使用datetime,不用timestamp。

10、smalldatetime

1900 年 1 月 1 日到 2079 年 6 月 6 日,精确度为1 分钟。

11、FLOAT[(M,D)] [ZEROFILL]

一个小(单精密)浮点数字。不能无符号。允许的值是-3.402823466E+38到-1.175494351E-38,0

和1.175494351E-38到3.402823466E+38。M是显示宽度而D是小数的位数。没有参数的FLOAT或有<24

的一个参数表示一个单精密浮点数字。占用空间为4字节。

12、double[(M,D)]

[ZEROFILL]

一个正常大小(双精密)浮点数字。不能无符号。允许的值是-1.7976931348623157E+308到-2.2250738585072014E-308、

0和2.2250738585072014E-308到1.7976931348623157E+308。M是显示宽度而D是小数位数。没有一个参数的DOUBLE或FLOAT(X)(25

< = X < =

53)代表一个双精密浮点数字。占用空间为8字节。

13、decimal[(M,D])] [ZEROFILL]

一个未压缩(unpack)的浮点数字。不能无符号。行为如同一个CHAR列:“未压缩”意味着数字作为一个字符串被存储,值的每一位使用一个字符。小数点,并且对于负数,“-”符号不在M中计算。如果D是0,值将没有小数点或小数部分。DECIMAL值的最大范围与DOUBLE相同,但是对一个给定的DECIMAL列,实际的范围可以通过M和D的选择被限制。如果D被省略,它被设置为0。如果M被省掉,它被设置为10。注意,在MySQL3.22里,M参数包括符号和小数点。