Tidb⽂章系列-Oracle迁移实战-数据类型转换
Mysql数字类型,来源⽹络
数字类型
根据字节数即可算出表⽰的范围了
TINYINT 1 字节
oracle decimal类型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。
如果是零售贷款⾦额,int⾜够,如果是公司代码⾦额,必须⽤bigint。
如果涉及报表统计汇总int则不够,需使⽤bigint或者decimal。
有时候为了兼顾零售和公司业务,增加代码复⽤,都使⽤bigint或者decimal(20,2)。MySQL ⽇期类型⼩数秒的处理
Mybatis⾥必须使⽤LocalDateTime的类与timestamp对应。Date会导致秒处理问题。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论