mysql的数值型分为数据整形和浮点型
整形数据包括以下
tinyint 1字节 -128~127/0~255
smallint 2字节 大~大
mediumint 3字节 比较大~比较大
int 4字节 很大~很大
bigint 8字节 非常大~非常大 ^_^
tinyint/smallint/mediumint/int/bigint类比为 *
定义整形数据的格式为:*(n)
其中n为显示的长度
什么是显示的长度呢?
当定义的整形用zerofill修饰,且输入的整形数据长度达不到n时,数据前将用0补齐n位。
这个定义仅对显示有效,而且好像只有mysql的client能够这么显示,我的navicat就不显示。展示如下:
表定义语句;
CREATE TABLE `type_test` (
`datetimedatetime` datetime DEFAULT NULL,
`datedate` date DEFAULT NULL,
`deci` decimal(5,2) DEFAULT NULL,
`timetime` time DEFAULT NULL,
`timestamptimestamp` timestamp NULL DEFAULT NULL ON UPDATE CURRENT_TIMESTAMP,
`d` double(5,2) DEFAULT NULL,
`yearyear` year(4) DEFAULT NULL,
`f` float(5,3) DEFAULT NULL,
`bint` bigint(30) unsigned zerofill DEFAULT NULL,
`iint` int(20) unsigned zerofill DEFAULT NULL,
`mint_noUnsigned` mediumint(10) DEFAULT NULL,
`mint` mediumint(20) DEFAULT NULL,
`sint_noUnsigned` smallint(3) unsigned DEFAULT NULL,
`sint` smallint(5) DEFAULT NULL,
`tint` tinyint(5) unsigned zerofill DEFAULT NULL,
`tint_noUnsigned` tinyint(5) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
navicate展示:
mysql-client展示:
有图有真相。
另外,zerofill必须和unsigned(无符号)连用,原因你就想吧。^_^
浮点包括float、double和decimal
通整形数,float/double/decimal类别%
定义形如:%(m,n)
m:精度,即浮点数的总长度,不带小数点
n:标度,小数位数
理解的float、double和decimal就是表示小数的,而且float和double可能还有准确性的问题,建议用decimal,不过decimal的开销会大。
再详细的还需要深入研究。。
可以参考: