MySQL列类型之——数值类型

 如想进一步了解有关mysql的信息请点击http://dev.mysql.com/doc/refman/5.1/zh/column-types.html

MySQL支持多种列类型:数值类型、日期/时间类型和字符串(字符)类型。本章首先对数值类型进行了介绍。几种列类型描述使用了下述惯例:

·         M

表示最大显示宽度。最大有效显示宽度是255

·         D

适用于浮点和定点类型,并表示小数点后面的位数。最大可能的值是30,但不应大于M-2

·         方括号(‘[’‘]’)表示可选部分。

类型

 

范围

字节

备注

BIT[(M)]

位字段类型

M表示每个值的位数,范围为从164。如果M被省略, 默认为1

要指定位值,可以使用b'value'符。value是一个用01编写的二进制值。例如,b'111'b'100000000'分别表示7128

 

大约(M+7)/8个字节

 

2.如果为BIT(M)列分配的值的长度小于M位,在值的左边用0填充。例如,为BIT(6)列分配一个值b'101',其效果与分配b'000101'相同

TINYINT[(M)]

[UNSIGNED] [ZEROFILL

很小的整数

带符号的范围是-128127

无符号的范围是0255

1

 

BOOLBOOLEAN

TINYINT(1)的同义词

zero值被视为假。非zero值视为真。

1

 

SMALLINT[(M)] [UNSIGNED] [ZEROFILL]

小的整数

带符号的范围是-3276832767

无符号的范围是065535

2

 

MEDIUMINT[(M)] [UNSIGNED] [ZEROFILL]

中等大小的整数

带符号的范围是-83886088388607

无符号的范围是016777215

3

 

INT[(M)]

[UNSIGNED] [ZEROFILL]

普通大小的整数

带符号的范围是-21474836482147483647。无符号的范围是04294967295

4

 

INTEGER[(M)] [UNSIGNED] [ZEROFILL]

INT的同义词。

 

4

 

BIGINT[(M)]

[UNSIGNED] [ZEROFILL]

大整数

带符号的范围是-92233720368547758089223372036854775807

无符号的范围是018446744073709551615

8

 

 

FLOAT[(M,D)] [UNSIGNED] [ZEROFILL]

(单精度)浮点数

允许的值是-3.402823466E+38-1.175494351E-3801.175494351E-383.402823466E+38

4

1.     

 

DOUBLE[(M,D)] [UNSIGNED] [ZEROFILL]

普通大小(双精度)浮点数

允许的值是-1.7976931348623157E+308-2.2250738585072014E-30802.2250738585072014E-308 1.7976931348623157E+308

8

1.     

 

DECIMAL[(M[,D])] [UNSIGNED] [ZEROFILL]

压缩的严格定点数

小数点和(负数)‘-’符号不包括在M中。如果D被省略, 默认是0。如果M被省略, 默认是10DECIMAL整数最大位数(M)65。支持的十进制数的最大位数(D)30

M+2

1.     

 

 

M指示最大显示宽度。最大有效显示宽度是255。显示宽度与存储大小或类型包含的值的范围无关。

如果为一个数值列指定ZEROFILLMySQL自动为该列添加UNSIGNED属性。

SERIALBIGINT UNSIGNED NOT NULL AUTO_INCREMENT UNIQUE的一个别名。

在整数列定义中,SERIAL DEFAULT VALUENOT NULL AUTO_INCREMENT UNIQUE的一个别名。

警告:应当清楚,当使用在整数值(其中一个是UNSIGNED类型)之间使用减号时,结果是无符号。

使用浮点数可能会遇到意想不到的问题,因为在MySQL中的所有计算用双精度完成

注:

1.      当结合可选扩展属性ZEROFILL使用时, 默认补充的空格用零代替。例如,对于声明为INT(5) ZEROFILL的列,值4检索为00004。请注意如果在整数列保存超过显示宽度的一个值,当MySQL为复杂联接生成临时表时会遇到问题,因为在这些情况下MySQL相信数据适合原列宽度。

2.      所有整数类型可以有一个可选(非标准)属性UNSIGNED。当你想要在列内只允许非负数和该列需要较大的上限数值范围时可以使用无符号值。浮点和定点类型也可以为UNSIGNED。同数类型,该属性防止负值保存到列中。然而,与整数类型不同的是,列值的上范围保持不变。

3.      应清楚BIGINT列的下述内容:

a.            使用带符号的BIGINTDOUBLE值进行所有算法,因此除了位函数,不应使用大于9223372036854775807(63)的无符号的大整数! 如果这样做,结果中的最后几位可能出错,这是由于将BIGINT值转换为DOUBLE进行四舍五入时造成的错误。

b.            总是可以使用一个字符串在BIGINT列中保存严格整数值。在这种情况下,MySQL执行字符串-数字转换,其间不存在双精度表示。

c.             当两个操作数均为整数值时,-+* 操作符使用BIGINT算法。这说明如果乘两个大整数(或来自返回整数的函数),当结果大于9223372036854775807时,会得到意想不到的结果。

4.      所有整数类型可以有一个可选(非标准)属性UNSIGNED。当你想要在列内只允许非负数和该列需要较大的上限数值范围时可以使用无符号值。浮点和定点类型也可以为UNSIGNED。同数类型,该属性防止负值保存到列中。然而,与整数类型不同的是,列值的上范围保持不变。

5.      MySQL允许使用非标准语法:FLOAT(M,D)REAL(M,D)DOUBLE PRECISION(M,D)。这里,“(M,D)”表示该值一共显示M位整数,其中D位位于小数点后面。例如,定义为FLOAT(7,4)的一个列可以显示为-999.9999MySQL保存值时进行四舍五入,因此如果在FLOAT(7,4)列内插入999.00009,近似结果是999.0001

6.      DECIMALNUMERIC类型在MySQL中视为相同的类型。它们用于保存必须为确切精度的值,例如货币数据。当声明该类型的列时,可以(并且通常要)指定精度和标度;例如:salary DECIMAL(5,2)在该例子中,5是精度,2是标度。精度表示保存值的主要位数,标度表示小数点后面可以保存的位数。

7.      SQL模式

a.            当要在一个数值列内保存一个超出该列允许范围的值时,MySQL的操作取决于此时有效的SQL模式。如果模式未设置,MySQL将值裁剪到范围的相应端点,并保存裁减好的值。但是,如果模式设置为traditional(“严格模式”),超出范围的值将被拒绝并提示错误,并且根据SQL标准插入会失败。

b.            如果INT列是UNSIGNED,列范围的大小相同,但其端点会变为到04294967295。如果你试图保存-99999999999999999999,以非严格模式保存到列中的值是04294967296

c.             如果在浮点或定点列中分配的值超过指定(或默认)精度和标度规定的范围,MySQL以非严格模式保存表示范围相应端点的值。

d.            MySQL没有工作在严格模式时,对于ALTER TABLELOAD DATA INFILEUPDATE和多行INSERT语句,由于裁剪发生的转换将报告为警告。

e.            MySQL工作在严格模式时,这些语句将失败,并且部分或全部值不会插入或更改,取决于是否表为事务表和其它因素。

转载于:https://www.cnblogs.com/mo-beifeng/archive/2011/11/16/2251375.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值