MySQL数据类型

1.整数

类型 范围 存储大小
tinyint -128 ~ 127 1字节
tinyint unsigned 0 ~ 255 1字节
smallint -32768 ~ 32767 2字节
smallint unsigned 0 ~ 65535 2字节
int -2147483648 ~ 2147483647 4字节
int unsigned 0 ~ 4294967295 4字节
bigint -9223372036854775808 ~ 9223372036854775807 8字节
bigint unsigned 0 ~ 18446744073709551615 8字节
  • 整数类型后接数字仅代表显示宽度,不代表存储长度。如 int(4) 与 int(10) 一致,固定存储为4字节,故建表语句中不必填写
  • 用作表主键时应该选用 int unsigned 或者 bigint unsigned
create table `example1` (
    `id` int unsigned NOT NULL AUTO_INCREMENT COMMENT '自增id',
    PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='示例1';
--
create table `example2` (
    `id` bigint unsigned NOT NULL AUTO_INCREMENT COMMENT '自增id',
    PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='示例2';
  • 使用整数代替枚举类enum能获取更高的效率,建议选用 tinyint 或者 tinyint unsigned
create table `example3` (
    `id` int unsigned NOT NULL AUTO_INCREMENT COMMENT '自增id',
    `sex` tinyint unsigned NOT NULL DEFAULT 0 COMMENT '性别:0-女 1-男',
    PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='示例3';
  • 计算机处理整数类型比字符串类型快,故存储IPV4地址时候可使用 int unsigned,通过inet_ntoa和inet_aton进行转化
create table `example4` (
    `id` int unsigned NOT NULL AUTO_INCREMENT COMMENT '自增id',
    `ip_addr` tinyint unsigned NOT NULL DEFAULT 0 COMMENT 'ipv4地址',
    PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='示例4';

select inet_aton('209.207.224.40');   --3520061480
select inet_ntoa('3520061480');       --209.207.224.40

2.小数

类型 范围 存储 特点
float(M, D) M表示位宽,D是小数点后位数 4字节 浮点数-保存近似值
double(M, D) M表示位宽,D是小数点后位数 8字节 浮点数-保存近似值
decimal(M, D) M表示总位数,D是小数点后位数 M+2字节 定点数-以字符串型式保存数值
  • 建议小数统一使用 decimal ,尤其是与货币、金融相关的数据
create table `example5` (
    `id` int unsigned NOT NULL AUTO_INCREMENT COMMENT '自增id',
    `price` decimal(10,2) NOT NULL DEFAULT 0 COMMENT '价格',
    PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='示例5';

3.字符串

类型 范围 存储
char(n) n个字符(非字节) 固定存储长度
varchar(n) n个字符(非字节) 字符串实际长度加上用于记录长度的字节
  • 实际取值为定长时应选用char(n)
  • 变长字符串varchar(n) 存在用于记录长度的字节,故字符串长度<=255时仅需1字节记录长度 varchar(255)
  • 不要对过长的 varchar 建立索引
  • **重要: varchar 字段为 null 时无法使用索引,应使用 not null 定义并将默认值设为空串 **
create table `example6` (
    `id` int unsigned NOT NULL AUTO_INCREMENT COMMENT '自增id',
    `remark` varchar(255) NOT NULL DEFAULT '' COMMENT '备注',
    PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='示例6';

4.日期时间

类型 范围 存储大小 说明
year 1901 ~ 2155 1字节 年份
date 1000-01-01 ~ 9999-12-31 3字节 日期
time -838:59:59 ~ 838:59:59 3字节 时间
timestamp 1970-01-01 00:00:00~ 2037年 4字节 日期时间
datetime 1000-01-01 00:00:00 ~ 9999-12-31 23:59:59 8字节 日期时间
  • 使用 timestamp 时可设置自动初始化和自动更新
create table `example7` (
    `id` int unsigned NOT NULL AUTO_INCREMENT COMMENT '自增id',
    `create_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间'
    `update_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
    PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='示例7';

你可能感兴趣的:(MySQL数据类型)