开启掘金成长之旅!这是我参与「掘金日新计划 · 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的区别
- char是固定长度,varchar是可变长度。
- 如果插入的数据小于char的长度,则会使用空格进行填充,会造成空间的浪费,但是长度固定,存取的速度比varchar快,varchar对于存入的数据多长就是按照多长来进行存储,由于长度不固定,所以存取速度比char慢。
- char最多存放255个字符,和编码无关,varchar最大能存放的字符个数是65532。
- 日常设计中,如果对于一些定长的字段,例如32位的md5值,推荐使用char,对于一些不固定长度的字段,varchar更好一些。
blob和text的区别
- blob用于存储二进制数据,text用于存储的是字符数据。
- blob没有字符集和排序规则,text是有字符集的,并且根据字符集的校对规则进行排序和比较。
datetime和timestamp的区别
- 存储时间的表现格式一致,都是
YYYY-MM-DD HH:MM:SS - 都包含日期和时间两部分
- 都可以存储微秒的小数秒(秒后6位小数秒)
- datetime存储空间是8个字节,timestamp存储空间是4个字节
- datetime存储的时间和时区无关,timestamp存储的时间时间和时区有关,显示也和时区有关。
- datetime默认值是null,timestamp默认不为null,默认值是当前时间(CURRENT_TIMESTAMP)
- datetime日期的范围是
1000-01-01 00:00:00.000000到9999-12-31 23:59:59.999999,timestamp时间范围是1970-01-01 00:00:01.000000 UTC到2038-01-09 03:14:07.999999 UTC - timestamp存储空间小,表示的时间范围小。
常见数据类型属性
- null: 数据列可以为null
- not null: 数据列不可以为null
- default: 默认值
- primary key: 主键
- auto_increment: 自动递增,用于整数类型
- unsigned: 无符号
- character set utf8: 设置utf8字符集
小结
引用阿里巴巴《JAVA开发手册泰山版》中的内容:
- 存储小数时,使用decimal,禁止使用float和double,会丢失精度。
- 存储的字符串如果是定长的,使用char类型进行存储。
- varchar是可变长字符串,不予先分配存储空间,长度不要超过5000,如果存储的长度大于此值,定义字段类型为text,独立出来一张表,用主键来对应,避免影响其他字段索引效率。