MySql中字段类型与长度和取值范围解析
MySQL中的数据类型⼤体分为三⼤类,数值类型,时间⽇期类型以及字符串类型。下⾯将对这三种类型进⾏详细的介绍。
⼀、数值类型
MySQL ⽀持所有标准SQL 中的数值类型,其中包括严格数值类型(INTEGER、SMALLINT、DECIMAL 和NUMERIC),以及近似数值数据类型(FLOAT、REAL 和DOUBLE PRECISION),并在标准SQL的基础上扩展增加了 TINYINT、MEDIUMINT 和BIGINT 这3种长度不同的整型和存放位数据的BIT类型。在⽇常建表定义当中,整型中最常⽤的依旧是int类型的数据,浮点型中则视情况⽽定。每种数据类型表⽰的范围如下表所⽰:
mediumint⽆符号最⼤为:16777215
注:我曾经在电信⾏业和银⾏业参与过IT项⽬的开发,在使⽤他们提供的数据的时候总会发现数据库中有⼩数点后数字时⼤都⽤的Decimal 这种数据类型,⽽不是采⽤开发中常⽤的⽽且最⼤取值范围⼀样的Double类型。Double和Decimal都属于浮点型,但是Decimal在精度上⾯来说,它的精度是Double的两倍,Float的四倍,在银⾏或者通信这些对数据要求⼗分精确的⾏业,Decimal是优于Double的更好的选择。但是需要注意的事,Decimal也是浮点类型的数据,只不过相对来说精度更⾼,在实际使⽤中如果⼩数点后位数过多⼀样会存在精度损失的问题。在《阿⾥巴巴Java编程规范》,明确提出使⽤Decimal取代double和float
为整型指定宽度,如INT(11),对于存储来说INT(1)和INT(20)是相同的,它不会限制值的合法范围,只是规定了MySQL与客户端的交互应该显⽰多少位⽽已,⽐如你向INT(1)中插⼊了123456值,数据库中其实已经存⼊了123456,只是对于客户端查出来是1⽽已。
⼆、时间⽇期类型
MySQL中提供了五种类型的时间类型,分别为DATE,DATETIME,TIMESTAMP,TIME和YEAR。下表是⽇期类型的详细区间。
如果要⽤来表⽰年⽉⽇,通常⽤DATE 来表⽰。
如果要⽤来表⽰年⽉⽇时分秒,通常⽤DATETIME 表⽰。
如果只⽤来表⽰时分秒,通常⽤TIME 来表⽰。
如果需要经常插⼊或者更新⽇期为当前系统时间,则通常使⽤TIMESTAMP 来表⽰。
TIMESTAMP 值返回后显⽰为“YYYY-MM-DD HH:MM:SS”格式的字符串,显⽰宽度固定为19 个字符。如果想要获得数字值,应在TIMESTAMP 列添加+0。如果只是表⽰年份,可以⽤YEAR 来表⽰,它⽐DATE 占⽤更少的空间。YEAR 有2 位或4 位格式的年。
默认是4 位格式。在4 位格式中,允许的值是1901~2155 和0000。在2 位格式中,允许的值是70~69,表⽰从1970~2069年。MySQL 以YYYY 格式显⽰YEAR值。
三、字符串类型
MySQL 中提供了多种对字符数据的存储类型,不同的版本可能有所差异。以5.0 版本为例,MySQL 包括了CHAR、VARCHAR、BINARY、VARBINARY、BLOB、TEXT、ENUM 和SET 等多种数据类型。其中常⽤的为VARCHAR,TEXT等。其中CHAR和VARCHAR存在以下区别
1.CHAR的长度是固定的,⽽VARCHAR2的长度是可以变化的,⽐如,存储字符串“abc",对于CHAR (10),表⽰你存储的字符将占10个字节(包括7个空字符),⽽同样的
VARCHAR2 (10)则只占⽤3个字节的长度,10只是最⼤值,当你存储的字符⼩于10时,按实际长度存储。
2.CHAR的效率⽐VARCHAR2的效率稍⾼。
3.⽬前VARCHAR是VARCHAR2的同义词。⼯业标准的VARCHAR类型可以存储空字符串,但是oracle不这样做,尽管它保留以后这样做的权利。
Oracle⾃⼰开发了⼀个数据类型VARCHAR2,varchar2最大长度
这个类型不是⼀个标准的VARCHAR,它将在数据库中varchar列可以存储空字符串的特性改为存储NULL值。如果你想有向后兼容的能⼒,Oracle建议使⽤VARCHAR2⽽不是VARCHAR。
下表列出了MySQL中所有的字符类型。
在实际的建表定义字段类型时,字符串通常会考虑使⽤VARCHAR,当字段数据有明确的精度和长度时使⽤CHAR更加⾼效。在有长⽂本输⼊时选择TEXT输⼊。其它的在平常开发中很少⽤到了。
转载于:my.oschina/u/2607135/blog/1838589
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论