字符串类型是在数据库中存储字符串的数据类型,字符串类型包括char,varchar,text,enum和set。
char类型和varchar类型
两种最主要的字符串类型,怎么存储在磁盘和内存中,跟存储引擎的具体实现有关
char类型
- 长度是固定,在创建表时就指定了,其长度可以是0-255的任意值
- MySQL会剔除所有的末尾空格
- char值会根据需要采用空格进行填充,以方便比较
- char适合存储很短的字符串,或者所有值都接近于同一个长度(MD5,因为这是定长的值)
- 对于经常变更的数据,char 也比varchar更好,因为定长的char不易产生碎片,对非常短的列,char比varchar在存储空间上更有效率比如:使用char(1)来存储y和n的值,char需要一个字节,varchar(1)则需要 2 个 字节,因为还有一个记录长度的额外字节
varchar类型
- 长度是可变的,在创建表时指定了最大长度,定义时,其最大值可以取0-65525之间的任意值,指定了varchar类型最大值以后,其长度可以在0-到最大长度之间
- 需要使用1或2个额外字节记录字符串的长度,如果列的最大长度<=255,需要1个字节表示,否则需要2个字节表示 ---VARCHAR(10)列需要11个字节存储空间,VARCHAR(1000)需要1002个字节
- VARCHAR节省了存储空间,对性能也有帮助,但由于行是变长的,在update时可能是行变得比原来更长,需要做额外的操作(字符串列最大长度比平均长度大很多,列的更新很少,所以碎片不是问题)
- MySQL在存储和检索时会保留末尾空格
varchar(5) 和 varchar(10)存储'hello'的空间开销是一样,但是使用更短的列的优势在于:更长的列会消耗更多的内存,因为MySQL会分配固定大小的内存块来保存内部值,尤其是使用内存临时表进行排序或操作时会特别糟糕,在利用磁盘临时表进行排序时也同样糟糕