# 数据类型
[TOC]
## 列属性
| 名称 | 描述|
| --- | --- |
| auto_increment | 自增数 |
| default | 默认值 |
| not null | 不为空 |
| zerofill | 填充零 |
## 整数类型
| 名称 | 大小 | 范围 | 范围(无符号)|
| --- | --- | --- | --- |
| tiny INT | 1个字节 | -128, 127 | 0, 255|
| small INT | 2个字节 | -32768, 32767 | 0, 65535|
| medium INT | 3个字节 | -8388608, 8388607 | 0, 16777215|
| INT |INT eger | 4个字节 | -2147483648, 2147483647 | 0, 4294967295|
| big INT | 8个字节 | 超大整数 | |
* int(0) : 显示数字的宽度,不限制值的大小
* 以上可配合 unsigned (无符号) 非负数, zerofill :0填充
*****
## 实数类型 - 浮点
| 名称 | 大小 | 类型| 范围|
| --- | --- | --- | --- |
| float | 4个字节 | 单精度 | 255, 30|
| double | 8个字节 | 双精度 | 255, 30|
| decimal | | 定点型 | 65, 30|
* float数值类型用于表示单精度浮点数值
* double数值类型用于表示双精度浮点数值
* float和double都是浮点型,而decimal是定点型;
`
单精度浮点数用4字节(32bit)表示浮点数,格式是:1位符号位 8位表示指数 23位表示尾数
`
`
双精度浮点数8字节(64bit)表示实数,格式是:1位符号位 11位表示指数 52位表示尾数
`
> 7.22 转成 二进制 111.00111000010100011110101110000101000111101011100001
> 可发现无论是单精度还是双精度浮点数表示都会产生误差,只是程度不同
> 因此在计算时特别注意浮点数
> deicmal 可以存储比bigint还大的整数,也可存储精确的小数
**decimal**
```
MySQL分别为整数和小数部分分配存储空间。 MySQL使用二进制格式存储`DECIMAL`值。它将`9`位数字包装成`4`个字节。
对于每个部分,需要`4`个字节来存储`9`位数的每个倍数。剩余数字所需的存储如下表所示:
| 剩余数字 | 位 |
| --- | --- |
| 0 | 0 |
| 1–2 | 1 |
| 3–4 | 2 |
| 5–6 | 3 |
| 7-9 | 4 |
例如,`DECIMAL(19,9)`对于小数部分具有`9`位数字,对于整数部分具有`19`位= `10`位数字,小数部分需要`4`个字节。 整数部分对于前`9`位数字需要`4`个字节,`1`个剩余字节需要`1`个字节。`DECIMAL(19,9)`列总共需要`9`个字节。
```
****
## 字符串类型
| 名称 | 大小 | 描述及存储需求 |
| --- | --- | --- |
| varchar | M | M为0~65536之间的整数|
| char | M | M为0~255之间的整数|
| tiny text | | 允许长度0~255字节|
| text | | 允许长度0~65535字节|
| tiny blob | | 允许长度0~255字节|
| blob | | 允许长度0~65535字节|
> varchar 用于存储可变长字符串,它比定长类型更节省空间,varchar使用1或2个额外字节记录字符串长度,列长度小于255字节,使用1个字节表示,否则用2个
> char 是定长的,根据定义的字符串长度分配足够的空间,会根据需要采用`空格`进行填充以方便比较, char 适合存储很短的字符串,或者所有值都接近同一个长度
>* varchar(n) 和 char(n) 可以存储的中文字符数和英文字符数是一致的,都是n个字符
>* 4.x版本是通过字节数表示,5.x版本是表示字符数
* char 和 varchar 存储超过设定的长度时 都会被截断
* 对于非常短的列,char比varchar在存储空间上更有效率
* 在检索的时候,char列会删除尾部的空格而varchar则保留了这些空格
> text 以字符串存储,blob 以二进制存储。
****
## 枚举类型
| 名称 | 大小 | 描述及存储需求 |
| --- | --- | --- |
| enum | 2个字节 | 内部存储整数|
* 共有2 个字节,0-65535,因此可以有 65535个选项可以使用
* 可插入常量相等的索引数值: 从1开始
> 不使用数字作为enum枚举的常量,易混乱
> 排序是按照内部存储的整数进行排序
****
## 时间类型
| 名称 | 大小 | 格式 |
| --- | --- | --- |
| datetime | 8个字节 | YYYY-MM-DD HH:MM:SS |
| timestamp | 4个字节 | YYYY-MM-DD HH:MM:SS|
| date | 4个字节 | YYYY-MM-DD|
| time | 3个字节 | HH:MM:SS|
| year | 1个字节 | YYYY|
* datetime 是原样输入输出,timestamp 是把客户端插入的时间从当前时区转化为UTC(世界标准时间)进行存储。查询时,将其又转化为客户端当前时区进行返回。
* timestamp 最大范围是到2038年某个时刻
> timestamp 比datetime 效率更高
> `CURRENT_TIMESTAMP`表示使用`CURRENT_TIMESTAMP()`函数来获取当前时间,类似于NOW()函数
> 用整数保存时间戳的格式不方便处理
> 存储微秒,可以使用bigint存储
- 简介
- PHP
- 字符串函数
- 数组函数
- 正则
- 加密函数
- 面向对象
- 关键字
- 设计模式
- 魔术方法
- 机制扩展
- 会话机制
- PHP框架
- laravel
- 问题
- swoole
- easyswoole
- workerman
- 数据库
- Sphinx
- MongoDB
- MemCache
- Redis
- 基础操作
- 数据类型
- 持久化
- 分布式锁
- 内存模型
- redis高级特性
- MySql
- 基础操作
- 数据类型
- 数据表引擎
- 锁机制
- 事务处理
- 存储过程
- 触发器
- 索引
- 关联查询
- 分析SQL语句-优化查询
- 分区分表
- 主从复制
- MySql安全性
- 网络协议
- HTTP
- header详解
- 状态码
- nginx-配置
- 逻辑算法
- 时间和空间复杂度
- 常见算法
- 数据结构
- 核心
- 进程、线程、协程
- 存储容量-计量单位
- 开发软件及配置
- 版本控制器
- Git
- Fidder
- Fidder-Android7
- 自动化部署
- Jenkins
- supervisor
- Elasticsearch
- LogStash
- RabbitMQ
- AB测试
- JAVA-JDK
- FileBeat
- PhpStorm
- Composer
- Linux
- API安全
- 高并发及大流量相关概念
- 网站优化
- WEB
- Electron