1 MySQL基础

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)
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容