VARCHAR和CHAR是两种最主要的字符串类型。它们的存储方式和数据检索方式都不一样。
VARCHAR和CHAR的数据检索效率:CHAR > VARCHAR
VARCHAR类型
VARCHAR类型用于存储可变长字符串,是最常见的字符串数据类型。它比定长类型更节省空间,因为它仅使用必要的空间。
VARCHAR类型的实际长度是它的值的实际长度+1,这一个字节用于保存实际使用了多大的长度。VARCHAR节省了存储空间,所以对性能也有帮助。
但是,由于行是变长的,在UPDATE时可能使行变得比原来更长,这就导致需要做额外的工作。
CHAR类型
CHAR类型用于存储定长字符串,CHAR字段上的索引效率级高。比如定义char(10),那么不论你存储的数据是否达到了10个字节,都要占去10个字节的空间。CHAR值会根据需要采用空格进行填充以方便比较。
应用场景
VARCHAR类型适用于文章标题、商品名称、图片路径等字符串最大长度大于平均长度的列。
CHAR类型适用于存储密码的MD5值、手机号码、身份证号码、订单号等长度相对固定的列。
总结
该字段数据集的平均长度与最大长度是否相差很小,若相差很小优先考虑CHAR类型,反之,考虑VARCHAR类型。
若字段存储的是MD5后的哈希值,或一些定长的值,优先选取CHAR类型。
若字段经常需要更新,则优先考虑CHAR类型,由于CHAR类型为定长,因此不容易产生碎片。
对于字段值存储很小的信息,优先选取CHAR类型,因为VARCHAR类型会占用额外的字节保存字符串长度信息。
当能够选取CHAR类型的时候,或者说空间消耗相对并不是影响因素的重点时,尽量选取CHAR类型,因为在其他方面,CHAR类型都有着或多或少的优势。而当空间消耗成为了很大的影响因素以后,则考虑使用VARCHAR类型。