MSQL数据类型

MySQL提供了多种数据类型,主要包括数值型、字符串类型、⽇期和时间类 型。

在整数类型中,按照取值范围和存储⽅式不同,分为tinyint、smallint、 mediumint、int和bigint这 5个类型。如果超出类型范围的操作,会发⽣“Out of range”错 误提⽰。为了避免此类问题发⽣,在选择数据类型时要根据应⽤的实际情况确定其取 值范围,最后根据确定的结果慎重选择数据类型。

对于⼩数的表⽰,MySQL 分为两种⽅式:浮点数和定点数。浮点数包括 float(单精度)和double(双精度),⽽定点数则只有decimal⼀种表⽰。定点数在 MySQL内部以字符串形式存放,⽐浮点数更精确,适合⽤来表⽰货币等精度⾼的数 据。

浮点数和定点数都可以⽤类型名称后加“(M,D)”的⽅式来进⾏表⽰,“(M,D)”表⽰ 该值⼀共显⽰M位数字(整数位+⼩数位),其中D位位于⼩数点后⾯,M和D又称为 精度和标度。例如,定义为float(7,4)的⼀个列可以显⽰为-999.9999。MySQL保存值时 进⾏四舍五⼊,因此如果在 float(7,4)列内插⼊ 999.00009,近似结果是 999.0001。值得 注意的是,浮点数后⾯跟“(M,D)”的⽤法是⾮标准⽤法,如果要⽤于数据库的迁移,则 最好不要这么使⽤。float和double在不指定精度时,默认会按照实际的精度(由实际 的硬件和操作系统决定)来显⽰,⽽decimal在不指定精度时,默认的整数位为10,默 认的⼩数位为0。

下⾯通过⼀个例⼦来⽐较float、double和decimal三者之间的不同。

(1)创建测试表,分别将id1、id2、id3字段设置为float(5,2)、double(5,2)、decimal(5,2)

CREATE TABLE 't1' (

'id1' float(5,2) default NULL, 'id2' double(5,2) default NULL, 'id3' decimal(5,2) default NULL

)

(2)往id1、id2和id3这3个字段中插⼊数据1.23:

mysql> insert into t1 values(1.23,1.23,1.23); Query OK, 1 row affected (0.00  sec)

可以发现,id1、id2、id3都插⼊了表t1,但是id1和id2由于标度的限制,舍去了最 后⼀位,数据变为了1.23。

(4)同时向id1、id2、id3字段中都插⼊数据1.234:

mysql> insert into t1 values(1.234,1.234,1.234); 

(5)将id1、id2、id3字段的精度和标度全部去掉,再次插⼊数据1.23:

这个时候,可以发现id1、id2字段中可以正常插⼊数据,⽽id3字段的⼩数位被截 断。

上⾯这个例⼦验证了上⾯提到的浮点数如果不写精度和标度,则会按照实际精度 值显⽰,如果有精度和标度,则会⾃动将四舍五⼊后的结果插⼊,系统不会报错;定 点数如果不写精度和标度,则按照默认值decimal(10,0)来进⾏操作,并且如果数据超 越了精度和标度值,系统则会报错。

MySQL中有多种数据类型可以⽤于⽇期和时间的表⽰,不同的版本可能有所差异。

如果要⽤来表⽰年⽉⽇,通常⽤DATE来表⽰。 

如果要⽤来表⽰年⽉⽇时分秒,通常⽤DATETIME表⽰。 

如果只⽤来表⽰时分秒,通常⽤TIME来表⽰。

DATE、TIME和DATETIME是最常使⽤的3种⽇期类型,以下例⼦在3种类型字段 插⼊了相同的⽇期值,来看看它们的显⽰结果。⾸先创建表t,字段分别为date、time、datetime三种⽇期类型:

mysql> create table t (d date,t time,dt datetime); 

显⽽易见,DATETIME是DATE和TIME的组合,⽤户可以根据不同的需要,来选 择不同的⽇期或时间类型以满⾜不同的应⽤。

最后通过⼀个例⼦,说明如何采⽤不同的格式将⽇期“2007-9-3 12:10:10”插⼊到 DATETIME列中。

mysql> create table t6(dt datetime); Query OK, 0 rows affected (0.03  sec)

mysql> insert into t6 values('2007-9-3 12:10:10'); Query OK, 1 row affected (0.00 sec)

mysql> insert into t6 values('2007/9/3 12+10+10'); Query OK, 1 row affected (0.00 sec)

mysql> insert into t6 values('20070903121010'); Query OK, 1 row affected (0.01  sec)

mysql> insert into t6 values(20070903121010); Query OK, 1 row affected (0.00  sec)

MySQL中提供了多种对字符数据的存储类型,不同的版本可能有所差异。以5.0版本为例,      MySQL包括了CHAR、VARCHAR、BINARY、VARBINARY、BLOB、TEXT、ENUM和SET等多种字符串类型

CHAR和VARCHAR很类似,都⽤来保存MySQL中较短的字符串。⼆者的主要区别在于存储⽅式的不同:CHAR列的长度固定为创建表时声明的长度,长度可以为从0~255的任何值;⽽VARCHAR列中的值为可变长字符串,长度可以指定为0~ 255(MySQL 5.0.3版本以前)或者 65535(MySQL 5.0.3版本以后)之间的值。在检索 的时候,CHAR列删除了尾部的空格,⽽VARCHAR则保留这些空格。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值