char 与 varchar 的区别
char
- char 表示定长字符串,长度是固定的;
- 如果插入数据的长度小于 char 的固定长度时,则用空格填充;
- 因为长度固定,所以存取速度要比 varchar 快很多,甚至能快 50%,但正因为其长度固定,所以会占据多余的空间,是空间换时间的做法;
- 对于 char 来说,最多能存放的字符个数为 255,和编码无关
varchar:
- varchar 表示可变长字符串,长度是可变的;
- 插入的数据是多长,就按照多长来存储;
- varchar 在存取方面与 char 相反,它存取慢,因为长度不固定,但正因如此,不占据多余的空间,是时间换空间的做法;
- 对于 varchar 来说,最多能存放的字符个数为 65532
日常使用过程中,对于长度相对固定的字符串,可以使用 char,比如手机号等,对于长度不确定的,使用 varchar 更合适一些,比如地址之类的。
blob 与 text
- blob 用于存储二进制数据,而 text 用于存储大字符串。
- blob 没有字符集,text 有一个字符集,并且根据字符集的校对规则对值进行排序和比较
datetime 与 timestamp
相同点:
- 两个数据类型存储时间的表现格式一致。均为 yyyy-MM-dd HH:mm:ss
- 两个数据类型都包含日期和时间两部分。
- 两个数据类型都可以存储微秒的小数秒(秒后6位小数秒)
区别:
- 日期范围: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:04:07:999999 UTC;
- 存储空间:datetime 的存储空间为 8 字节;timestamp 的存储空间为 4 字节;
- 时区相关:datetime 存储时间的与时区无关,不同时区展示的时间值是一样的;timestamp 存储的时间与时区有关,显示的值也依赖于时区,不同的时区展示的时间是不一样的;
- 默认值:datetime 的默认值为 null;timestamp 的字段默认不为空(not null),默认值为当前时间(CURRENT_TIMESTAMP)
?
本文参考自:面渣逆袭:MySQL六十六问,两万字+五十图详解! - 掘金
?
|