您好,欢迎访问一九零五行业门户网

MySQL中char与varchar数据类型选择原则

很多地方在分析char与varchar数据类型选择原则上,往往忽略了存储引擎。事实上,我们应当根据选定的存储引擎,确定如何选择合适的数据类型。
char与varchar比较值char(3)实际存储字符长度varchar(3)实际存储字符长度
” ’   ‘ 3 ” 1
‘ab’ ‘ab ‘ 3 ‘ab’ 3
‘abc’ ‘abc’ 3 ‘abc’ 4
‘abcdefg’ ‘abc’ 3 ‘abc’ 4
总结:从上表可以看出,char属于定长的。
char属于定长类型,varchar属于非定长类型,varchar属于变长。可能有人会问为什么varchar长度比数据长度大呢?因为varchar保存时用一个字节或两个字节长的前缀+数据。如果varchar列声明的长度大于255,长度前缀是两个字节,否则是一个字节。
myisam存储引擎myisam数据表,最好使用固定长度的数据列代替可变长度的数据列。
innodb 存储引擎建议使用varchar类型。
对于innodb数据表,内部的行存储格式没有区分固定长度和可变长度列(所有数据行都使用指向数据列值的头指针),因此在本质上,使用固定长度的char列不一定比使用可变长度varchar列简单。因而,主要的性能因素是数据行使用的存储总量。由于char平均占用的空间多于varchar,因此使用varchar来最小化需要处理的数据行的存储总量和磁盘i/o是比较好的。
memory存储引擎memory数据表目前都使用固定长度的数据行存储,因此无论使用char或varchar列都没有关系。两者都是作为char类型处理的。
误区1.我们都知道,utf-8的中文占3个字节,gbk占两个字节,那么varchar(20)是不是只能存储20个字节,即存储6个汉字呢?
答:不是这样的,(网上说5.0之前版本是这样的,没有测试)。mysql varchar(20)  不管中文还是英文都能存20个,但varchar字段的最大长度跟编码有关,如果是utf-8,那么大概65535/3,如果是gbk,那么大概65535/2
很多地方在分析char与varchar数据类型选择原则上,往往忽略了存储引擎。事实上,我们应当根据选定的存储引擎,确定如何选择合适的数据类型。
 以上就是mysql中char与varchar数据类型选择原则的内容。
其它类似信息

推荐信息