MySQL常用数据类型对比

102 阅读3分钟

开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第9天,点击查看活动详情

MySQL常用数据类型对比

概述

MySQL中常用数据类型有

整数类型(tinyint、smallint、mediumint、int、integer、bigint),

浮点类型(float、double),

定点数类型(decimal),

位类型(bit),

日期时间类型(year、time、date、datetime、timestamp),

文本字符串类型(char、varchar、tinytext、text、mediumtext、longtext),

枚举类型(enum),

集合类型(set),

二进制类型(binary、varbinary、tinyblob、blob、mediumblob、longblob),

JSON类型(json),

空间数据类型(geometry、point、linestring、polygon、multipoint、multilinestring、multipolygon)

varchar和char的区别

  1. char是固定长度,varchar是可变长度。
  2. 如果插入的数据小于char的长度,则会使用空格进行填充,会造成空间的浪费,但是长度固定,存取的速度比varchar快,varchar对于存入的数据多长就是按照多长来进行存储,由于长度不固定,所以存取速度比char慢。
  3. char最多存放255个字符,和编码无关,varchar最大能存放的字符个数是65532。
  4. 日常设计中,如果对于一些定长的字段,例如32位的md5值,推荐使用char,对于一些不固定长度的字段,varchar更好一些。

blob和text的区别

  1. blob用于存储二进制数据,text用于存储的是字符数据。
  2. blob没有字符集和排序规则,text是有字符集的,并且根据字符集的校对规则进行排序和比较。

datetime和timestamp的区别

  1. 存储时间的表现格式一致,都是YYYY-MM-DD HH:MM:SS
  2. 都包含日期和时间两部分
  3. 都可以存储微秒的小数秒(秒后6位小数秒)
  4. datetime存储空间是8个字节,timestamp存储空间是4个字节
  5. datetime存储的时间和时区无关,timestamp存储的时间时间和时区有关,显示也和时区有关。
  6. datetime默认值是null,timestamp默认不为null,默认值是当前时间(CURRENT_TIMESTAMP)
  7. datetime日期的范围是1000-01-01 00:00:00.0000009999-12-31 23:59:59.999999,timestamp时间范围是1970-01-01 00:00:01.000000 UTC2038-01-09 03:14:07.999999 UTC
  8. timestamp存储空间小,表示的时间范围小。

常见数据类型属性

  1. null: 数据列可以为null
  2. not null: 数据列不可以为null
  3. default: 默认值
  4. primary key: 主键
  5. auto_increment: 自动递增,用于整数类型
  6. unsigned: 无符号
  7. character set utf8: 设置utf8字符集

小结

引用阿里巴巴《JAVA开发手册泰山版》中的内容:

  1. 存储小数时,使用decimal,禁止使用float和double,会丢失精度。
  2. 存储的字符串如果是定长的,使用char类型进行存储。
  3. varchar是可变长字符串,不予先分配存储空间,长度不要超过5000,如果存储的长度大于此值,定义字段类型为text,独立出来一张表,用主键来对应,避免影响其他字段索引效率。