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';
最后编辑于 :
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。