前言
这里主要是 由于之前的一个 datetime 存储的时间 导致的问题的衍生出来的探究
探究的主要内容为 int 类类型的存储, 浮点类类型的存储, char 类类型的存储, blob 类类型的存储, enum/json/set/bit 类类型的存储
本文主要 的相关内容是 float, decimal 类类型的相关数据的存储
这部分数据 客户端 和 服务器这边的交互 主要是以字符串的形式交互
服务器这边的存储 主要是 浮点存储, 转换为二进制存储
基础阅读 mysql tiny/small/medium/big int 的数据存储
mysql类型 和 java类型对应
驱动的 ResultSetImpl 获取数据的时候有一层封装
因此不管是 tinyint, smallint, medinumint, int 在业务代码上面获取到的都是 Integer 接收
unsigned_int 因为 java 中 int 已经覆盖不了值域, 因此使用了 long 来接受
bigint 对应于类型 long 接收
unsigned_bigint 和上面 unsigned_int 同理, 使用了 BigInteger 接收
decimal, unsigned_bigdecimal 使用了 BigDecimal 接收
float, double 使用 Float, Double 接收
mysql 中 float 的服务器客户端的数据交互
和上面 tinyint 相同
mysql 服务器中对应的类型为 FLOAT
与客户端的交互, 将给定的 float 转换为 十进制 的字符串表示, 然后 响应回去
具体的转换实现在 dtoa.fcvt/gcvt
mysql 服务器 float 的存储
具体服务器存储这边 主要是基于 float 进行存储, ptr 本身存储的是一个 float 的数据
mysql 中 double 的服务器客户端的数据交互
和上面 tinyint 相同
mysql 服务器中对应的类型为 DOUBLE
与客户端的交互, 将给定的 double 转换为 十进制 的字符串表示, 然后 响应回去
具体的转换实现在 dtoa.fcvt/gcvt
mysql 服务器 double 的存储
具体服务器存储这边 主要是基于 double 进行存储, ptr 本身存储的是一个 double 的数据
mysql 中 decimal 的服务器客户端的数据交互
和上面 tinyint 相同
mysql 服务器中对应的类型为 DECIMAL
与客户端的交互, 解析给定的 my_decimal, 然后 直接响应回去
mysql 服务器 bigdecimal 的存储
将数据转换为 my_decimal, 然后 按照 my_decimal 的特定的方式进行存储
完