资源描述:
《MySQL常用数据类型和建库策略》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库。
1、1.MYSQL5数据类型,长度范围1.1数值类型MySQL支持所有标准SQL数值数据类型•这些类型包描严格数值数据类型(INTEGER,SMALLINT,DECIMAL和NUMERIC),以及近似数值数据类型(FLOAT,REAL和DOUBLEPRECISION).关键字TNT是INTEGER的同义词,关键字DEC是DECIMAL的同义词.BIT数据类型保存位字段值,并月.支持MylSAM,MEMORY,InnoDB和BDB表.作为SQL标准的扩展,MySQL也支持整数类型TINYINT,MEDIUMINT和BIGINT.下面的表显示了需要的每个整数类型
2、的存储和范围.MySQL还支持选择在该类型关键字后面的括号内指定整数值的显示宽度(例如,INT(4)).该可选显示宽度规定用于显示宽度小于指定的列宽度的值时从左侧填满宽度.显示宽度并不限制可以在列内保存的值的范围,也不限制超过列的指定宽度的值的显示.当结合可选扩展属性ZEROFTLL使用时,默认补充的空格用零代替•例如,对于声明为INT⑸ZEROFILL的列,值4检索为00004.请注意如杲在整数列保存超过显示宽度的一个值,当MySQL为复杂联接生成临时表时会遇到问题,因为在这些情况下MySQL相信数据适合原列宽度.所有整数类型可以有一个可选(非标准)属
3、性UNSIGNED.当你想耍在列内只允许非负数和该列需要较大的上限数值范围时可以使用无符号值.浮点和定点类型也可以为UNSIGNED.同数类型,该屈性防止负值保存到列中•然而,与整数类型不同的是,列值的上范围保持不变.如果为一个数值列指定ZEROFILL,MySQL口动为该列添加UNSIGNED属性.对于浮点列类型,在MySQL中单精度值使用4个字节,双精度值使用8个字节.FLOAT类型用于表示近似数值数据类型.SQL标准允许在关键字FLOAT后面的括号内选择用位指定精度(但不能为指数范ffl).MySQL还支持可选的只用于确定存储大小的精度规定.0到2
4、3的精度对应FLOAT列的4字节单精度.24到53的精度对应DOUBLE列的8字节双精度.MySQL允许使用非标准语法:FLOAT(M,D)或REAL(M,D)或DOUBLEPRECISION(M,D).这里,〃(M,D)〃表示该值一共显示M位整数,其中D位位于小数点后面.例如,定义为FLOAT(7,4)的一个列可以显示为-999.9999.MySQL保存值时进行四舍五入,因此如果在FLOAT(7,4)列内插入999.00009,近似结果是999.0001.MySQL将DOUBLE视为DOUBLEPRECISION(1K标准扩展)的同义词.MySQL还将
5、REAL视为DOUBLEPRECISION(非标准扩展)的同义词,除非SQL服务器模式包括REAL_AS_FLOAT选项.为了保证最人可能的可移植性,需要使用近似数值数据值存储的代码应使用FLOAT或DOUBLEPRECISION,不规定精度或位数.DECIMAL和NUMERIC类型在MySQL中视为相同的类型•它们用于保存必须为确切精度的值,例如货币数据•当声明该类型的列时,可以(并月•通常要)指定精度和标度;例如:salaryDECIMAL(5,2)在该例子中,5是精度,2是标度.精度表示保存值的主要位数,标度表示小数点后面可以保存的位数.在MySQ
6、L5.1屮以二进制格式保存DECIMAL和NUMERIC值.标准SQL要求salary列能够用5位整数位和两位小数保存任何值.因此,在这种情况下可以保存在salary列的值的范围是从-999.99到999.99.在标准SQL中,语法DECIMAL(M)等价于DECIMAL(M,0).同样,语法DECIMAL等价于DECIMAL(M,0),可以通过计算确定M的值•在MySQL5.1中支持DECIMAL和NUMERIC数据类型的变量形式.M默认值是10.DECIMAL或NUMERIC的最大位数是65,但具体的DECIMAL或NUMERIC列的实际范围受具体列
7、的精度或标度约束•如果此类列分配的值小数点后面的位数超过指定的标度允许的范围,值被转换为该标度.(具体操作与操作系统有关,但一般结果均被截取到允许的位数).BIT数据类型可用来保存位字段值.B1T(M)类型允许存储M位值.M范围为1到64.要指定位值,可以使用b'value'符.value是一个用0和1编写的二进制值.例如,b'lll'和b'100000000,分别表示7和12&参见9.1.5节,〃位字段值〃.如果为BIT(M)列分配的值的长度小于M位,在值的左边用0填充•例如,为BIT(6)列分配一个值b'ior,-其效果与分配b'oooior相同.当
8、要在一个数值列内保存一个超出该列允许范围的值时,MySQL的操作取决于此吋有效的