您的位置:首页 > 其它

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

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

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


SERIAL
BIGINT UNSIGNED NOT NULL AUTO_INCREMENT UNIQUE
的别名。

整数属性列定义中的
SERIAL DEFAULT VALUE
NOT 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]


大整数,有符号型的范围是
-9223372036854775808
9223372036854775807
,无符号型的范围是
0
18446744073709551615


关于 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
,[code]D
)] [UNSIGNED] [ZEROFILL][/code]

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

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

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

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

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

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

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

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

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

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


FLOAT(
p
) [UNSIGNED] [ZEROFILL]


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

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

DECIMAL[(
M
[,[code]D
])] [UNSIGNED] [ZEROFILL][/code]
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属性列,它的实际范围可能会受到所选的 M 和 D 的限制。M 的缺省值是 10,D 的缺省值是 0。

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

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

这些类型是 DECIMAL 的同义词,其中 FIXED 类型是为了和其他数据库系统兼容。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐