Mysql数字类型,来源网络
数字类型
根据字节数即可算出表示的范围了
TINYINT 1 字节
SMALLINT 2 个字节
MEDIUMINT 3 个字节
INT 4 个字节
INTEGER 4 个字节
BIGINT 8 个字节
FLOAT(X) 4 如果 X < = 24 或 8 如果 25 < = X < = 53
FLOAT 4 个字节
DOUBLE 8 个字节
DOUBLE PRECISION 8 个字节
REAL 8 个字节
DECIMAL(M,D) M字节(D+2 , 如果M < D)
NUMERIC(M,D) M字节(D+2 , 如果M < D)
日期和时间类型
DATE 3 个字节
DATETIME 8 个字节
TIMESTAMP 4 个字节
TIME 3 个字节
YEAR 1 字节
字符串类型
CHAR(M) M字节,1 <= M <= 255
VARCHAR(M) L+1 字节, 在此L <= M和1 <= M <= 255
TINYBLOB, TINYTEXT L+1 字节, 在此L< 2 ^ 8
BLOB, TEXT L+2 字节, 在此L< 2 ^ 16
MEDIUMBLOB, MEDIUMTEXT L+3 字节, 在此L< 2 ^ 24
LONGBLOB, LONGTEXT L+4 字节, 在此L< 2 ^ 32
ENUM('value1','value2',...) 1 或 2 个字节, 取决于枚举值的数目(最大值65535)
SET('value1','value2',...) 1,2,3,4或8个字节, 取决于集合成员的数量(最多64个成员)
BIGINT 与DECIMAL(20,0)那个效率高
BIGINT。
理论上整数运算是最基本的CPU指令,比浮点数/定点数更有效率。实际上比起数据的硬盘IO,索引上的这点效率可以忽略不计。
还有考虑和程序的交互上,BIGINT有完全对应的Int64,DECIMAL对应过去的类型可能取值范围会不一致、需要额外的检查。
bigint效率应该更高,因为是真正的数值。
而decimal 和 numeric 是同义词,本质上是以 字符串的方式存储的。
mysql主键int和bigint类型的区别
有符号int最大可以支持到约22亿,远远大于我们的需求和MySQL单表所能支持的性能上限。对于OLTP应用来说,单表的规模一般要保持在千万级别,不会达到22亿上限。如果要加大预留量,可以把主键改为改为无符号int,上限为42亿,这个预留量已经是非常的充足了。
bigint数据类型最大为20位时,占8个字节,可以表示的最大数字是:9223372036854775807。我帮大家数了一下,是一个十九位的数字,所以遇到几十亿(10位数字)、几百亿什么的绝不在话下。什么地方会用到呢?比如彩票期号:20190101001,这样的格式是11位数字,也可以用bigint来表示的。
使用bigint,会占用更大的磁盘和内存空间,内存空间毕竟有限,无效的占用会导致更多的数据换入换出,额外增加了IO的压力,对性能是不利的。
因此推荐自增主键使用int unsigned类型,但不建议使用bigint。
原文路径:http://blog.csdn.net/atlandis_jl/article/details/45536387
如果是零售贷款金额,int足够,如果是公司代码金额,必须用bigint。
如果涉及报表统计汇总int则不够,需使用bigint或者decimal。
有时候为了兼顾零售和公司业务,增加代码复用,都使用bigint或者decimal(20,2)。
MySQL 日期类型小数秒的处理
Mybatis里必须使用LocalDateTime的类与timestamp对应。Date会导致秒处理问题。