版权声明:本文为博主原创文章,转载请附上博文链接! https://blog.csdn.net/weixin_43851310/article/details/87979887
MySQL数据类型
建表语法
【语法】
create table [if not exists] `表名`(
字段名 字段类型 [null|not null][default 值][auto_increment][primary key][comment 备注],
字段名 字段类型,
.....
字段名 字段类型
)[engine=存储引擎] [charset=编码] [collate=校对集];
【说明】
[if not exists] `表名` 判断表是否存在:存在-不管,不存在-创建
[null|not null] 声明字段值是否可以插入null数据
[default 值] 声明字段值如果没有录入数据则使用默认值
[primary key] 主键(特点:字段值不能重复且不能为null)
[auto_increment] 自增(该属性必须配合primary key效果字段值自动增长1、2、3)
[comment 备注] 声明字段的作用
[engine=存储引擎] 存储引擎
[charset=编码] 数据存储编码
字节
1字节(Byte)= 8位(bit)
1KB = 1024 Byte(字节)
英文:1个字符 = 1个字节
中文:1个字符 = 等于3个字节(utf-8) 等于2个字节(gbk)
1、数值型(整数)
无符号数(unsigned)
create table tint2 (num tinyint(10) unsigned)charset=utf8;
insert into tint2 values (0);
insert into tint2 values (255);
...
tinyint(10)其中10表示存储宽度(存储宽度指:当插入数据位数不够则自动从左侧补0,必须加zerofill属性宽度才会生效)
2、数值型(小数)
- 浮点型,特点:小数点浮动,有精度丢失
- 定点型,特点:小数点固定,不会丢失精度
浮点数 | 语法 | 占用字节 | 范围 | 精度范围 |
---|---|---|---|---|
单精度 | float(总长度,小数长度) | 4 | -3.4E+38~3.4E+38 | 大概为7位左右 |
双精度 | double(总长度,小数长度) | 8 | -1.79E+308~1.79E+308 | 大概为15位左右 |
定点数 | decimal(最大65,最大30) | 依赖于M和D的值 |
选择:
未涉及到资金小数可以用浮点型(float或double) 优先用float
涉及资金用decimal(注:decimal小数位一般2位如果没有小数会用0自动补充)例如:金钱money decimal(10,2)
3、日期类型
数据类型 | 描述 | 格式 | 占用字节 |
---|---|---|---|
datetime | 日期时间 | 年-月-日 小时:分钟:秒 | 8 |
date | 日期 | 年-月-日 | 4 |
time | 时间 | 小时:分钟:秒 | 3 |
year | 年份 | 年 | 1 |
timestamp | 时间戳 | 年-月-日 小时:分钟:秒 | 4 |
datetime(占8个字节)和timestamp(占4个字节)在表现上是一样
区别:
- 存储范围:datetime从1到9999,
- 存储方为:timestamp从1970年到2038年(原因是timestamp只占用了4个字节,而2038年01月19日11:14:07秒后就超过了4个字节的长度)
选择: 在实际运用中时间类型使用int类型,但是也有公司使用datetime
说明:
选择int类型原因:int比datetime更节省空间
选择datetime类型原因:int同timestamp最大存储时间为2038年
为什么选择int的公司比datetime多
项目不同页面所需格式 | int类型 | datetime类型 |
---|---|---|
2017/3/8 | date('Y/m/d’,时间戳) | 先转时间戳,再date函数 |
2048-3-16 | date('Y-m-d’,时间戳) | 先转时间戳,再date函数 |
2014/03/33 12:30:02 | date(‘Y/m/d H:i:s’,时间戳) | 直接显示 |
刚刚、24小时前… | 调用函数传递时间戳 | 先转时间戳,再调用函数 |
4、字符串型
数据类型 | 描述 |
---|---|
char(长度) | 定长字符(最多255个字符) |
varchar(长度) | 可变长度字符(65535个字节) |
tinytext | 大段文本(大块数据) 2^8-1=255个字符 |
text | 大段文本(大块数据) 2^16-1=65535个字符 |
mediumtext | 2^24-1 = 16777215个字符 |
longtext | 2^32-1 = 4294967295个字符 |
char的执行效率比varchar高(varchar回收空间、char不回收)
选择:
明确数据长度选择char反之用varchar,如:性别char(1) 标题varchar(60)
文章内容或者大块文字时选择text
5、枚举(enum)
只能从集合数据中获取一个值(单选)
语法:sex enum(‘男’, ‘女’)
MySQL枚举值是通过整型的数字来管理的,第一个值对应1,第二个值对应2依次类推
后期推荐使用tinyint类型:1-男,2-女