mysql 字符串类型
MySQL字符串最主要的类型是varchar和char。
varchar 用于存储可变长字符串,比定长节省空间。原理是使用1或2个额外字节记录字符串的长度:列长小于等于255字节,则用1字节表,否则用2字节。例如varchar(10)的列的存储空间为11字节,varchar(1000)的列则需要1002字节。
但是由于变长的,在update时会做额外的工作。
合适的场景:字符串列的最大长度比平均长度大很多;列更新较少;使用了像UTF-8这样复杂的字符集,每个字符都使用不同的字节数进行存储。
char 是定长的,MySQL 会删除所有的末尾空格。
合适的场景:很短的字符串,或者所有值接近同一个长度。如MD5值。经常更新的列char不容易产生碎片。定长的列最好用char,如身份证,手机号
长度限制:
char:最大长度为255,超过这个数值会提示:
MySQL said: Column length too big for column 'char' (max = 255); use BLOB or TEXT instead
varchar:最大长度与字符集有关:
字符类型若为gbk,每个字符最多占2个字节,最大长度不能超过32766;
字符类型若为utf8,每个字符最多占3个字节,最大长度不能超过21845。
使用utf-8mb4字符集,一个字符占用4个字节,最大长度是(65535-2)/4=16383 个字符。
若定义的时候超过上述限制,则varchar字段会被强行转为text类型,并产生warning。
text:变长,最大长度65535字节。没有默认值。
mediumtext:最大长度16777215(2^24-1)字节。
longtext:最大长度2147483647(2^31-1)字节。
总结:varchar可变长,用额外1个或2个字节存储长度,节省空间;char定长,没有额外操作,更适合短且定长的列。