CHAR存储为固定长度字符串,VARCHAR存储为可变长度字符串。我可以使用VARCHAR存储固定长度的字符串,但为什么人们仍然想使用CHAR来存储固定长度的字符串?使用CHAR over VARCHAR有什么好处吗?如果没有任何好处,为什么mySQL数据库不会删除CHAR的选项?
答案 0 :(得分:8)
varchar存储可变长度字符串。它可以比固定长度类型需要更少的存储空间,因为它只使用了所需的空间。
varchar还使用1或2个额外字节来记录值的长度。例如,varchar(10)将使用最多11个字节的存储空间。 varchar有助于提高性能,因为它节省了空间但是因为行是可变长度的,所以当你更新它们时它们会增长,这会导致额外的工作。如果一行增长并且不再适合其原始位置,则该行为依赖于存储引擎......
char是固定长度的,mysql总是为指定的字符数分配足够的空间。存储CHAR值时,MySQL会删除任何尾随空格。根据需要使用空格填充值以进行比较。
如果要存储非常短的字符串,或者所有值都接近,则char非常有用 相同的长度。例如,CHAR是用户密码的MD5值的不错选择, 总长度相同。
对于经常更改的数据,char也优于VARCHAR,因为固定长度的行不容易出现碎片。