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 时间跨度有限问题
    1. 因为只占4个字节
    2. 最大为 ll a= (1<<31)-1
    3. 一天为86400s
    4. 所以年跨度= a/ 86400/365 =68
    5. 又因为它代表的是1970年开始的,所以最大支持到2038年;

2.不同编码下字符与字节对应关系

编码 一个字符所需字节数
utf8mb4 4
utf8 3
gbk 2
ascii编码 1