Tidb文章系列-Oracle迁移实战-数据类型转换

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会导致秒处理问题。

你可能感兴趣的:(#,数据库技术-Mysql,tidb,mysql)