1.字段类型
1.1 整型
| 类型 | 存储空间 |
|---|---|
| TINYINT | 8 位 |
| SMALLINT | 16 位 |
| MEDIUMINT | 24 位 |
| INT | 32 位 |
| BIGINT | 64 位 |
- 一般情况下 越小的列 越好。
- int(11) 的数字的含义只是规定了交互工具显示字符的个数,对于存储和计算来说是没有意义的。
1.2 浮点型
| 类型 | |
|---|---|
| float | 浮点型 |
| double | 浮点型 |
| decimal | 高精度小数类型 |
- 都可以指定列宽
- decimal(18,9) 表示总共18位,取9位存储小数部分,剩下9位存储整数部分
1.3 字符串
| 类型 | 是否定长 | 取值范围(字符) |
|---|---|---|
| char | 定长 | [0,255] |
| varchar | 不定长 | [0,16383] |
- 一个汉字和一个英文字母都占一个字符(详见2.不同编码下字符与字节对应关系)
1.4 时间和日期
| 类型 | 占用字节 | 与时区是否有关 |
|---|---|---|
| datetime | 8 | 无关 |
| timestamp | 4 | 有关 |
- timestamp 时间跨度有限问题
因为只占4个字节最大为 ll a= (1<<31)-1一天为86400s所以年跨度= a/ 86400/365 =68 年又因为它代表的是1970年开始的,所以最大支持到2038年;
2.不同编码下字符与字节对应关系
| 编码 | 一个字符所需字节数 |
|---|---|
| utf8mb4 | 4 |
| utf8 | 3 |
| gbk | 2 |
| ascii编码 | 1 |
