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

原创 2016年05月31日 15:37:15

很多地方在分析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

版权声明:本文为博主原创文章,转载请附带原文网址,更多内容,请查看:http://www.findme.wang

mysql char和varchar的区别和适用选择

char对比varchar 相同点:char与varchar都是存储字符串的数据类型 不同点:char是固定长度的字符类型,而varchar是可变长度的字符类型,这个一定要注意。另外进行select时...
  • belen_xue
  • belen_xue
  • 2016年09月26日 17:21
  • 1473

浅谈mysql中varchar(m)与char(n)的区别与联系

对这varchar和char这两个数据类型最简单区分是:varchar存放变长字符串,char存放定长字符串。那么他们是否还有其他差别呢?本文将从浅显的层次以抛出问题解决问题的形式对两者的区分进一步了...
  • zhengwish
  • zhengwish
  • 2016年03月01日 17:44
  • 2711

MySQL Innodb数据库性能实践——VARCHAR vs CHAR

学过数据库理论的读者,都应该还记得关于CHAR和VARCHAR的性能对比:CHAR比VARCHAR更快,因为CHAR是固定长度的,而VARCHAR需要增加一个长度标识,处理时需要多一次运算。 针对这...
  • yah99_wolf
  • yah99_wolf
  • 2011年12月04日 09:11
  • 11763

MySQL数据类型char与varchar中数字代表的究竟是字节数还是字符数?

实例是最好的说明,所以,废话少说,看表看例子~mysql> show create table test_varchar_utf8\G *************************** 1. r...
  • zyz511919766
  • zyz511919766
  • 2016年06月15日 15:00
  • 10851

mysql中char与varchar的区别分析

以下内容转载自 :http://www.jb51.net/article/23575.htm char与varchar的区别 char (20)长度固定, 如'www.jb51.net' 存储...
  • gycool21
  • gycool21
  • 2016年08月22日 19:07
  • 1172

mysql中char与varchar的区别 哪种字段的查找效率高

在mySQL 中char 和 varchar 都是存储字符串的,区别在于char有固定的长度,而varchar属于可变长的字符类型。char(M)类型的数据列里,每个值都占用M个字节,如果某个长度小于...
  • CSDN_GOON
  • CSDN_GOON
  • 2015年11月26日 16:28
  • 5347

MySQL数据类型varchar详解

这篇文章详细介绍了MySQL数据类型varchar,探讨varchar到底能存多长的数据、InnoDB和MyISAM中的varchar等问题,需要的朋友可以参考下...
  • lee272616
  • lee272616
  • 2016年03月25日 09:41
  • 8207

mysql数据库中char与varchar类型的区别

在建立数据库表结构的时候,为了给一个String类型的数据定义一个数据库的数据库类型,一般参考的都是char或者varchar,这两种选择有时候让人很纠结,今天想总结一下它们两者的区别,明确一下选择塔...
  • panying1
  • panying1
  • 2016年10月24日 15:33
  • 697

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

char与varchar比较;针对MyISAM、InnoDB、Memory存储引擎如何选择char与varchar,以及一些可能的误区...
  • hsd2012
  • hsd2012
  • 2016年05月31日 15:37
  • 7353

mysql优化_建表字段类型varchar,char的选择

在创建数据库表结构的时候对了String类型的数据我们经常会纠结数据库给他设定成什么数据库类型呢? 一般都是参考char和varcahr, 下面明确总结下这两种数据库类型的区别:         ...
  • qq_34581118
  • qq_34581118
  • 2017年07月20日 17:37
  • 392
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:MySQL中char与varchar数据类型选择原则
举报原因:
原因补充:

(最多只允许输入30个字)