数值类型简介 (Overview of Numeric Types)(此文为转载)

M 表示最大显示宽度(maximum display width),最大显示宽度的合法值不超过255。显示宽度与存储尺寸、取值范围无关,这在第11.2节"Numeric Types"中有说明。

如果您在数值型属性列中指定了ZEROFILL属性,MySQL自动为此列添加UNSIGNED属性。

SERIALBIGINT UNSIGNED NOT NULL AUTO_INCREMENT UNIQUE的别名。

整数属性列定义中的SERIAL DEFAULT VALUENOT NULL AUTO_INCREMENT UNIQUE的别名。

警告: 如果您在做减法运算时其中一个操作数是UNSIGNED类型,那么结算结果也是无符号的

  • BIT[(M)]

    位域类型。M 表示每个值的比特数,从1到64,缺省为1。

    这个数据类型是为 MyISAM 加入到 MySQL 5.0.3 的,并在 5.0.5 扩展到了 MEMORY、InnoDB 和 BDB。在 5.0.3 之前,BIT 只是TINYINT(1) 的同义词。

  • TINYINT[(M)] [UNSIGNED] [ZEROFILL]

    非常小的整数。有符号型的范围从-128到127,无符号型的范围从0到255。

  • BOOL, BOOLEAN

    这些类型是 TINYINT(1) 的同义词,值为 0 就认为是 false,非 0 值认为是 true。

    将来会引入完全的布尔类型处理和标准 SQL 保持一致。

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

    小整数。有符号型的范围是-32768到32767,无符号型的范围是0到65535。

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

    中型大小的整数。有符号型的范围是-8388608到8388607,无符号型的范围是0到16777215。

  • INT[(M)] [UNSIGNED] [ZEROFILL]

    正常大小的整数,有符号型的范围是-2147483648到2147483647,无符号型的范围是0到4294967295。

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

    这个类型是 INT 的同义词。

  • BIGINT[(M)] [UNSIGNED] [ZEROFILL]

    大整数,有符号型的范围是 -92233720368547758089223372036854775807,无符号型的范围是 018446744073709551615

    关于 BIGINT 属性列,以下事情你必须清楚:

    • 所有算术都是用有符号的 BIGINT 或 DOUBLE 值做计算的,所以不要使用大于9223372036854775807 (63位)的大整数,除非用在位运算函数中。否则,计算结果的最后几位数可能错误,因为从 BIGINT 向 DOUBLE 转化时会产生舍入误差。

      MySQL 在以下情形中使用 BIGINT:

      • 在 BIGINT 属性列中使用整数(而不是浮点数)来存储大的无符号值时。

      • 在 MIN(col_name) 或 MAX(col_name) 函数中,col_name 引用了 BIGINT 属性列。

      • 当使用运算符(+ - * 等等)时两个操作数都是整数。

    • 通过存入一个字符串,总能够在 BIGINT 属性列中存入一个精确的整数值。这种情况下,MySQL 进行字符串向数字的转化,转化过程不会引入双精度中间表示。

    • - + * 运算符在两个操作数都是整数值时使用 BIGINT 做运算。这意味着当两个大整数相乘(或者从返回整型值的函数取得结果)时,如果结果大于 9223372036854775807 就可能会得到意想不到的后果。

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

    小型(单精度)浮点数。允许值包括 -3.402823466E+38-1.175494351E-380,以及 1.175494351E-383.402823466E+38。这些都是理论极限,基于 IEEE 标准。真实范围可能要小一些,取决于硬件和操作系统。

    M 是总的小数位数,D 是小数点之后的位数。如果省略了 MD,值将会按照硬件的允许的范围存储。单精度浮点数具有大约 7 位有效数字

    如果指定了 UNSIGNED,负数值将不被接受。

    使用 FLOAT 可能会造成意想不到的问题,因为在 MySQL 中所有的计算都是用双精度数完成。参看 A.5.7 节 "Solving Problems with No Matching Rows"。

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

    正常大小(双精度)浮点数。允许值包括 -1.7976931348623157E+308-2.2250738585072014E-308,0,和 2.2250738585072014E-3081.7976931348623157E+308。这些都是理论极限,基于 IEEE 标准。真实范围可能要小一些,取决于硬件和操作系统。

    M 是总的小数位数,D 是小数点之后的位数。如果省略了 MD,值将会按照硬件的允许的范围存储。双精度浮点数具有大约 15 位有效数字

    如果指定了 UNSIGNED,负数值将不被接受。

  • DOUBLE PRECISION[(M,D)] [UNSIGNED] [ZEROFILL], REAL[(M,D)] [UNSIGNED] [ZEROFILL]

    这些类型是 DOUBLE 的同义词,但例外:如果启用了REAL_AS_FLOAT SQL模式,REAL 将是FLOAT 的同义词而非 DOUBLE 的同义词。

  • FLOAT(p) [UNSIGNED] [ZEROFILL]

    浮点数。p 代表精度(比特数),但在 MySQL 中 p 仅仅用来判定使用 FLOAT 还是 DOUBLE 来存储这个数据类型。如果 p 是从 0 到 24,那么数据类型就变成了不带 MD 的 FLOAT 型;如果 p 是从 25 到 53,那么数据类型就变成了不带 MD 的 DOUBLE 型。这个属性列的取值范围,相应地和本节前面描述的单精度 FLOAT 型、双精度 DOUBLE型一样。

    提供 FLOAT(p) 语法是为了 ODBC 的兼容性。

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

    MySQL 5.0.3 及向上版本:

    包装了的”精确“的定点数。M 是总的小数位数(精度),D 是小数点之后的位数(规模)。小数点和负数的负号"-" 不计入 M。如果 D 是 0,就没有小数部分。M 的最大值是 65 (从 5.0.3 到 5.0.5 是 64),D 的最大值是 30。M 的缺省值是 10,D 的缺省值是 0。

    如果指定了 UNSIGNED,负数值将不被接受。

    DECIMAL属性列的所有基本计算 (+, -, *, /) 都采用 65 位精度值。

    在 MySQL 5.0.3 之前:

    没有包装的定点数。它的行为就像 CHAR;“没有包装”的意思是这个数是当作一个字符串存储的,用一个字符代表值得一个十进制位。M 是总的小数位数,D 是小数点之后的位数。小数点和负数的负号"-" 不计入 M,尽管为它们保留了空间。如果 D 是 0,就没有小数部分。DECIMAL值的最大范围和 DOUBLE 相同,但给定一个DECIMAL属性列,它的实际范围可能会受到所选的 MD 的限制。M 的缺省值是 10,D 的缺省值是 0。

    如果指定了 UNSIGNED,负数值将不被接受。

  • DEC[(M[,D])] [UNSIGNED] [ZEROFILL], NUMERIC[(M[,D])] [UNSIGNED] [ZEROFILL], FIXED[(M[,D])] [UNSIGNED] [ZEROFILL]

    这些类型是 DECIMAL 的同义词,其中 FIXED 类型是为了和其他数据库系统兼容。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值