Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1744375
  • 博文数量: 263
  • 博客积分: 1218
  • 博客等级: 少尉
  • 技术积分: 2862
  • 用 户 组: 普通用户
  • 注册时间: 2011-06-19 02:33
文章分类

全部博文(263)

文章存档

2020年(12)

2019年(2)

2018年(10)

2016年(1)

2015年(20)

2014年(115)

2013年(46)

2012年(37)

2011年(20)

分类: Mysql/postgreSQL

2012-05-16 10:23:33

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

  OS : LINUX AS4

  MYSQL: 5.0.51a-log

  ENGINE : Myisam

  2. 分析

  date 类型共占3个字节(24位),范围'1000-01-01'到'9999-12-31' , 格式'YYYY-MM-DD' ,

  其中:从左到右数

  1~15位: 年(共15位)

  16~19位: 存储月(共4位)

  20~24位: 存储日(共5位)

  比如," 2009-03-09",其中:

  十进制 十六进制 二进制

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

  2009 -> 0X7D9 -> 000 0111 1101 1001

  03 -> 0X03 -> 0011

  09 -> 0X09 -> 01001

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

  将二进制组合后: 0000 1111 1011 0010 0110 1001

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

  0 F B 2 6 9

  即十六进制: 0FB269

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

  3. 验证

  下面我们可以来验证一下:

  drop table if exists heyf;

  create table heyf (id int ,birthday date) type myisam;

  insert into heyf values (12,'2009-03-09');

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

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

  0000000 0cf9 0000 6900 0fb2

  0000008

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

  其中:

  f9 : 标志位

  0c 00 00 00 : COL1 ,INT = 12

  69 b2 0f : 即日期.由于是反向存储,所以需要反向读取:0FB269

  4. 相关函数

  4.1 十六进制转成十进制

  select 0xa +0 ;

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

  10

  或

  select conv("a",16,10) ;

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

  10

  4.2 十进制转成十六进制

  select conv(10,10,16) ;

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

  A

转自:

阅读(1355) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~