mysql数据库类型以及取值范围_数据库中常用数据类型的取值范围介绍(以mysql、SQL Server为准)...

在数据库设计时,会对字段数据类型和字段长度进行考虑。最终选定的字段数据类型和字段长度又会对数据库的性能和占用空间大小造成一定影响。字段的数据类型定了,则字段在数据库中占用的存储空间大小也已经定了,其与指定的数据类型长度无关。以数据库开发中最常用的字段类型int来说:int(M) 在 integer 数据类型中,M 表示最大显示宽度。在 int(M) 中,M 的值跟 int(M) 所占多少存储空间并无任何关系。和数字位数也无关系 int(3)、int(4)、int(8) 在磁盘上都是占用 4 btyes 的存储空间。所以数据类型的选择要根据实际情况而定,最好能满足需求。不要杀鸡用牛刀,因为对空间的浪费会很严重。此文对开发中碰到的字段的数据类型及其能够表示的数据的范围进行总结(逐渐总结完善)。

1.数据库中常用的定义整数数据的精确数字数据类型有:mediumint、tinyint、smallint、int、bigint(以mysql为例)。它们各自能够表示的整数范围如下:

tinyint

有符号的范围是-128 到 127,无符号的范围是 从 0 到 255 的整型数据。存储大小为 1 字节。

smallint

一个小整数。有符号的范围是-2^15 (-32,768) 到 2^15 - 1 (32,767) 的整型数据,无符号的范围是0到65535。存储大小为 2 个字节。

mediumint

一个中等大小整数,有符号的范围是-8388608到8388607,无符号的范围是0到16777215。存储大小为3个字节。

int或integer

一个正常大小整数。有符号的范围是-2^31 (-2,147,483,648) 到 2^31 - 1 (2,147,483,647) 的整型数据(所有数字),无符号的范围是0到4294967295。存储大小为 4 个字节。int 的 SQL-92 同义字为 integer。

bigint

从 -2^63 (-9223372036854775808) 到 2^63-1 (9223372036854775807) 的整型数据(所有数字),无符号的范围是0到18446744073709551615。存储大小为 8 个字节。

注意:

所有算术运算用有符号的BIGINT或DOUBLE值完成,因此你不应该使用大于9223372036854775807(63位)的有符号大整数,除了位函数!

当两个参数是INTEGER值时,-、+和*将使用BIGINT运算!这意味着如果你乘2个大整数(或来自于返回整数的函数),如果结果大于9223372036854775807,你可能会得到意外的结果。

一个浮点数字,不能是无符号的,对一个单精度浮点数,其精度可以是<=24,对一个双精度浮点数,是在25 和53之间,这些类型如FLOAT和DOUBLE类型马上在下面描述。FLOAT(X)有对应的FLOAT和DOUBLE相同的范围,但是显示尺寸和小数位数是未定义的。在MySQL3.23中,这是一个真正的浮点值。在更早的MySQL版本中,FLOAT(precision)总是有2位小数。该句法为了ODBC兼容性而提供。

补充:

在支持整数值的地方都支持 bigint 数据类型。但是,bigint 用于某些特殊的情况,当整数值超过 int 数据类型支持的范围时,就可以采用 bigint。在 SQL Server 中,int 数据类型是主要的整数数据类型。

在数据类型优先次序表中,bigint 位于 smallmoney 和 int 之间。

只有当参数表达式是 bigint 数据类型时,函数才返回 bigint。SQL Server 不会自动将其它整数数据类型(tinyint、smallint 和 int)提升为 bigint。

使用 +、-、*、/ 或 % 等算术运算符将 int、smallint、tinyint 或 bigint 常量值隐式或显式转换为float、real、decimal 或 numeric 数据类型时,SQL Server 计算数据类型和表达式结果的精度时应用的规则有所不同,这取决于查询是否是自动参数化的。因此,查询中的类似表达式有时可能会生成不同的结果。 如果查询不是自动参数化的,则将常量值转换为指定的数据类型之前,首先将其转换为 numeric,该数据类型的精度很大足以保存常量的值。例如,常量值 1 转换为 numeric (1, 0),常量值 250 转换为 numeric (3, 0)。如果查询是自动参数化的,则将常量值转换为最终数据类型之前,始终先将其转换为 numeric (10, 0)。如果涉及 / 运算符,则对于类似查询而言,不仅结果类型的精度可能不同,而且结果值也可能不同。例如,包含表达式 SELECT CAST (1.0 / 7 AS float) 的自动参数化查询的结果值将不同于非自动参数化的同一查询的结果值,因为自动参数化查询的结果将被截断以适合 numeric (10, 0) 数据类型。

转换整型数据

将整数隐式转换为字符数据类型时,如果整数太大而无法容纳到字符字段中,则 SQL Server 会输入 ASCII 字符 42,即星号 (*)。大于 2,147,483,647 的整数常量将转换为decimal 数据类型,而不是 bigint 数据类型。下面的示例显示当超过此阈值时,结果的数据类型将从 int 变为 decimal。

SELECT2147483647 / 2 AS Result1, 2147483649 / 2 AS Result2 ;

下面是结果集:

Result1      Result2

1073741823   1073741824.500000

2.其它常用的数据类型(以mysql为例)

FLOAT -3.402823466E+38 - -1.175494351E-38,0,1.175494351E-38 - 3.402823466E+38 DOUBLE 或 DOUBLE PRECISION 或 REAL -1.7976931348623157E+308 - -2.2250738585072014E-308,0,2.2250738585072014E-308 - 1.7976931348623157E+308 DECIMAL[(M,[D])] 或 NUMERIC(M,D) 由M(整个数字的长度,包括小数点,小数点左边的位数,小数点右边的位数,但不包括负号)和D(小数点右边的位数)来决定,M缺省为10,D缺省为0 DATE 1000-01-01 - 9999-12-31 DATETIME 1000-01-01 00:00:00 - 9999-12-31 23:59:59 TIMESTAMP 1970-01-01 00:00:00 - 2037年的某天(具体是哪天我也不知道,呵呵) TIME -838:59:59' to 838:59:59 YEAR[(2|4)] 缺省为4位格式,4位格式取值范围为1901 - 2155,0000,2位格式取值范围为70-69(1970-2069) CHAR(M) [BINARY] 或 NCHAR(M) [BINARY] M的范围为1 - 255,如果没有BINARY项,则不分大小写,NCHAR表示使用缺省的字符集.在数据库中以空格补足,但在取出来时末尾的空格将自动去掉. [NATIONAL] VARCHAR(M) [BINARY] M的范围为1 - 255.在数据库中末尾的空格将自动去掉. TINYBLOB 或 TINYTEXT 255(2^8-1)个字符 BLOB 或 TEXT 65535(2^16-1)个字符 MEDIUMBLOB 或 MEDIUMTEXT 16777215 (2^24-1)个字符 LONGBLOB 或 LONGTEXT 4294967295 (2^32-1)个字符 ENUM('value1','value2',...) 可以总共有65535个不同的值 SET('value1','value2',...) 最多有64个成员

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值