MYSQL支持所有标准SQL中的数值类型,下表列出了MYSQL 5.0中支持的所有数值类型,其中INT是INTEGER的用名词,DEC是DECIMAL同名词。
整数类型 |
字节 |
最小值 |
最大值 |
TINYINT |
1 |
有符号-128 ,无符号0 |
有符号127,无符号255 |
SMALLINT |
2 |
有符号-32768 ,无符号0 |
有符号32767,无符号65535 |
MEDIUMINT |
3 |
有符号-8388608 ,无符号0 |
有符号8388607,无符号1677215 |
INT ,INTEGER |
4 |
有符号-2147483648,无符号0 |
有符号214748347,无符号4294967295 |
BIGINT |
8 |
有符号-9223372036854775808 无符号0 |
有符号9223372036854775807 无符号18446744073709551615 |
浮点数类型 |
字节 |
最小值 |
最大值 |
FLOAT |
4 |
-1.175494351E-38 |
3.402823466E+38 |
DOUBLE |
8 |
-2.2250738585072014E-308 |
1.7976931348623157E+308 |
定点数类型 |
字节 |
描述 | |
DECMD, DECIMAL(M,D) |
M+2 |
最大取值范围与DOUBLE相同,给定DECIMAL的有效取值范围由M和D决定 | |
位类型 |
字节 |
最小值 |
最大值 |
BIT(M) |
1~8 |
BIT(1) |
BIT(8) |
1. 对于整形数据,MySql还支持在类型名称后面的小括号内指定显示宽度,例如 int(5)表示当数值宽度小于5位的时候在素孩子前面填满宽度,如果不显示指定宽度则默认为int(11).一般配合zerofill使用顾名思义,zerofill就是用“0”填充的意思。
例:创建表t1,有id1和id2两个字段,指定其数值宽度分别为int和int(5).
Create table t1(id1 int , id2 int(5) );
Insert into t1 values(1,1);
分别修改id1和id2的字段类型,加入zerofill参数:
Alter table t1 modify id1 int zerofill ;
Alter table t1 modify id2 int(5) zerofill ;
插入大于宽度限制的值,还是按照类型的实际精度进行保存。
整数类型还有一个属性:AUTO_INCREMENT。在需要产生唯一标识符或顺序值时,可利用此属性,这个属性只用于整数类型。AUTO_INCREMENT值一般从1开始,每行增加1。在插入NULL到一个AUTO_INCREMENT列时,MySql插入一个比该列中当前最大值大1的值。一个表中最多只能有一个AUTO_INCREMENT列。对于任何想要使用AUTO_INCREMENT的列应该定义为NOT NULL,并定义为PRIMARY KEY或定义为UNIQUE键。定义法如下:
Create table ai(num int auto_increment not null primary key);
2. 浮点数和定点数都可以用类型名称后加“(M,D)”的方式来进行表示,该值一共显示M位数字(整数位+小数位)MySql保存值时进行四舍五入,注意:浮点数后面跟“(M,D)”的用法是非标准用法,如果要用于数据库迁移,则最好不要用。Float和double在不指定精度时,默认会按照实际的精度(由实际的硬件和操作系统决定)来显示,而decimal在不指定精度时,默认的整数位为10,默认的小数位为0。
警告:第三个数据被截断,
接下来作如下操作:
3. 对于BIT(位)类型,用于存放位字段值,BIT(M)可以用来存放多位二进制数,M范围从1~64,如果不写则默认为1位。对于位字段,直接使用select命令将不会看到结果,可以用bin()或者hex()函数进行读取。例:
数据插入bit类型字段时,首先转换为二进制,如果位数允许,将插入成功;如果位数小于实际定义的位数,则插入失败,