技术开发 频道

MYSQL-数据类型存储-TIME

  【IT168技术文档1. 环境版本:

  OS : LINUX AS4

  MYSQL: 5.0.51a-log

  ENGINE : Myisam

  2. 分析

  DATATIME 类型 共占3个字节(24位),范围'-838:59:59'到'838:59:59' ,格式'HH:MM:SS'

  在存储时(类似于datatime类型中的time部分),先将时间转换成INTEGER形式:

  HOUR*10000+MIN*100+SECOND

  比如, "30:56:12",其中:

  注意这里都是用十进制来计算的.

  ---------------------------------------------

  时间: 30*10000 + 56*100 +12 --> 305612

  ---------------------------------------------

  将得到的INTEGER数值转成十六进制:

  十进制 十六进制

  ---------------------------------------------

  305612 --> 4A9CC

  注意:日期时间字段的数据是反向存储的.

  所以存到数据文件里应该是: cc a9 04

  3. 验证

  下面我们可以来验证一下上面的分析结果:

  drop table if exists heyf;

  create table heyf (id int ,curtime time) type myisam;

  insert into heyf values (11,'30:56:12');

  system hexdump /opt/mysql/data/test/heyf.MYD

  ----------------------------

  0000000 0bf9 0000 cc00 04a9

  0000008

  ----------------------------

  其中:

  f9 : 标志位

  0b 00 00 00 : COL1 ,INT = 11

  cc a9 04 : 即时间.由于是反向存储,所以需要反向读取: 04a9cc

  在这里我们看到,存储的内容与我们第2步中分析出来的结果是一致的!

  4. 相关函数

  4.1 十六进制转成十进制

  select 0x04a9cc+0 ;

  -------------------

  305612

  或

  select conv("04a9cc",16,10) ;

  --------------------

  305612

  4.2 十进制转成十六进制

  select conv(305612,10,16) ;

  --------------------

  04a9cc

0
相关文章