1.1 基本概念
1、MySQL有哪些数据库类型?
- 数值类型
有包括TINYINT、SMALLINT、MEDIUMINT、INT、BIGINT,分别表示1字节、2字节、3字节、4字节、8字节的整数类型。
1)任何整数类型都可以加上UNSIGNED属性,表示无符号整数。
2)任何整数类型都可以指定长度,但它不会限制数据的合法长度,仅仅限制了显示长度。还有包括FLOAT、DOUBLE、DECIMAL在内的小数类型。 - 字符串类型
包括VARCHAR、CHAR、TEXT、BLOB。
注意:VARCHAR(n) 和CHAR(n)中的n并不代表字节个数,而是代表字符的个数。 - 日期和时间类型
常用于表示日期和时间类型为DATETIME、DATE和TIMESTAMP。
尽量使用TIMESTAMP,空间效率高于DATETIME。
2、CHAR和VARCHAR区别?
1)首先可以明确的是CHAR是定长的,而VARCHAR是可以变长。
CHAR会根据声明的字符串长度分配空间,并会使用空格对字符串右边进行尾部填充。所以在检索CHAR类型数据尾部空格会被删除,如保存的字符串‘char ’,但最后查询到的是‘char’。又因为长度固定,所以存储效率高于VARCHAR类型。
VARCHAR在MySQL5.0 之后长度支持到65535字节,但会在数据开头使用额外1~2字节存储字符长度(列长度小于255字节时使用1字节表示,否则2字节),在结尾使用1字节表示字符串结束。
2)再者,在存储方式上,CHAR对英文字符(ASCII)占用1字节,对一个汉字使用2字节。而VARCHAR对每个字符使用2字节。
虽然VARCHAR是根据字符串长度分配存储空间的,单在内存中依旧使用声明长度进行排序等作业,故在使用时仍需综合考量字段长度。
2、CHAR 和 VARCHAR如何选型?
1)对于经常变更的数据来说,CHAR比VARCHAR更好,因为CHAR不容易产生碎片。
2)对于非常短的列或固定长度的数据(MD5),CHAR比VARCHAR在存储空间上更有效率。
3)使用时要注意只分配需要的空间,更长的列排序时会消耗耕更多的内存。
4)尽量避免使用TEXT/BLOB类型,查询时会使用临时表,导致严重的性能开销。
4、CHAR,VARCHAR和TEXT的区别?
1)长度区别
- Char范围是0~255。
- Varchar最长是64K(注意这里的64k是整个row的长度,要考虑到其它的column,还有如果存在not null的时候回占用一位,对不同的字符集,有效长度还不一样,比如utf-8的,最多2)