精华内容
下载资源
问答
  • MYSQL中CHAR与VARCHAR区别
    2018-03-30 09:52:24

    CHAR:定长字符串,1~255个字符

    VARCHAR:可变长字符串,1~65535个字符

    更多相关内容
  • char与varchar区别 char (13)长度固定, 如’www.jb51.net’ 存储需要空间 12个字符 varchar(13) 可变长 如’www.jb51.net’ 需要存储空间 13字符, 从上面可以看得出来char 长度是固定的,不管你存储的数据是多少...
  • CHARVARCHAR类型相似,差别主要在存储,尾随空格和检索方式上。 CHARVARCHAR相同的是:CHARVARCHAR都指定了字符长度,注意是字符长度。例如char(30) 和 varchar(30)表示都可以存30个字符。有一点要注意的是在...
  • char是定长的 char(10) varchar2(10) 同样存 a ,char占用了10个字符,varchar2 只占用了 一个字符(一个中文占两个字符,英文占一个)。 但是char的查询速度要比varchar2快。varchar2,Oracle还要进行语法分析,这...
  • 在MySQL中,charvarchar和text类型的字段都可以用来存储字符类型的数据,charvarchar都可以指定最大的字符长度,但text不可以。 它们的存储方式和数据的检索方式也都不一样。 数据的检索效率是:char > varchar ...
  • NULL 博文链接:https://wy649898543.iteye.com/blog/1446712
  • 你真的知道CHARVARCHAR类型在存储和读取时的区别吗? 还是先抛几条结论吧: 1、存储的时候,CHAR总是会补足空格后再存储,不管用户插入数据时尾部有没有包含空格。 2、存储的时候,VARCHAR不会先补足空格后再存储...
  • MySQL数据库char与varchar区别

    万次阅读 2016-08-25 17:10:15
    VARCHAR与CHAR字符型数据的差异字符串数据类型 MySQL数据类型 含义 char(n) 固定长度,最多255个字符 varchar(n) 可变长度,最多65535个字符 tinytext 可变长度,最多255个字符

    转载请注明出处:

    http://blog.csdn.net/gane_cheng/article/details/52316408

    http://www.ganecheng.tech/blog/52316408.html (浏览效果更好)

    ① VARCHAR与CHAR字符型数据的差异

    字符串数据类型

    MySQL数据类型含义
    char(n)固定长度,最多 281 个字符, 281 个字节
    varchar(n)可变长度,最多 2161 个字符, 2161 个字节
    tinytext可变长度,最多 281 个字符, 281 个字节
    text可变长度,最多 2161 个字符, 2161 个字节
    mediumtext可变长度,最多 2241 个字符, 2241 个字节
    longtext可变长度,最多 2321 个字符, 2321 个字节


    1.char(n)和varchar(n)中括号中n代表字符的个数,并不代表字节个数,所以当使用了中文的时候(UTF8)意味着可以插入m个中文,但是实际会占用m*3个字节, m3<=255 m3<=65535 。使用 utf8mb4的话插入m个中文,会占用m*4个字节。 m4<=255 m4<=65535

    char(M),M × w bytes, 0 <= M <= 255, where w is the number of bytes required for the maximum-length character in the character set.

    varchar(M),L + 1 bytes if column values require 0 − 255 bytes, L + 2 bytes if values may require more than 255 bytes

    2.同时char和varchar最大的区别就在于char不管实际value都会占用n个字符的空间,而varchar只会占用实际字符应该占用的字节空间L+1(L=0到255)或L+2(L>255),并且实际字节空间L+1<=255,或者L+2<=65535.

    3.超过char和varchar的n设置后,字符串会被截断。

    4.char的上限为255字节,varchar的上限65535字节,text的上限为65535字节。

    5.char在存储的时候会截断尾部的空格,varchar和text不会。

    6.varchar(M),M范围是0~65535.M的值以最大行大小(65535字节)为准.例如,如果使用UTF-8编码,一个字符占3个字节,那么M最大为21844.

    VARCHAR(M) ,A variable-length string. M represents the maximum column length in characters. The range of M is 0 to 65,535. The effective maximum length of a VARCHAR is subject to the maximum row size (65,535 bytes, which is shared among all columns) and the character set used. For example, utf8 characters can require up to three bytes per character, so a VARCHAR column that uses the utf8 character set can be declared to be a maximum of 21,844 characters.

    下面的内容仅供参考,请辩证的去看。

    在MySQL数据库中,用的最多的字符型数据类型就是Varchar和Char,这两种数据类型虽然都是用来存放字符型数据,但是无论从结构还是从数据的保存方式来看,两者相差很大。而且其具体的实现方式,还依赖与存储引擎。我这里就以大家最常用的MYISAM存储引擎为例,谈谈这两种数据类型的差异。在后续建议中,也是针对这种存储类型而言的。

    Varchar往往用来保存可变长度的字符串。简单的说,我们只是给其固定了一个最大值,然后系统会根据实际存储的数据量来分配合适的存储空间。为此相比CHAR字符数据而言,其能够比固定长度类型占用更少的存储空间。通常情况下,VARCHAR数据类型能够节约磁盘空间,为此往往认为其能够提升数据库的性能。不过这里需要注意的是,这往往是一把双刃剑。其在提升性能的 同时,往往也会产生一些副作用。如因为其长度是可变的,为此在数据进行更新时可能会导致一些额外的工作。如在更改前,其字符长度是10位(Varchar 规定的最长字符数假设是50位),此时系统就只给其分配10个存储的位置(假设不考虑系统自身的开销)。更改后,其数据量达到了20位。由于没有超过最大 50位的限制,为此数据库还是允许其存储的。只是其原先的存储位置已经无法满足其存储的需求。此时系统就需要进行额外的操作。如根据存储引擎不同,有的会 采用拆分机制,而有的则会采用分页机制。

    CHAR数据类型与VARCHAR数据类型不同,其采用的是固定长度的存储方式。简单的说,就是系统总为其分配最大的存储空间。当数据保存时,即使 其没有达到最大的长度,系统也会为其分配这么多的存储空间。显然,这种存储方式会造成磁盘空间的浪费。这里笔者需要提醒的一点是,当字符位数不足时,系统 并不会采用空格来填充。相反,如果在保存CHAR值的时候,如果其后面有空值,系统还会自动过滤其空格。而在进行数据比较时,系统又会将空格填充到字符串 的末尾。

    显然,VARCHAR与CHAR两种字符型数据类型相比,最大的差异就是前者是可变长度,而后者则是固定长度。在存储时,前者会根据实际存储的数据 来分配最终的存储空间。而后者则不管实际存储数据的长度,都是根据CHAR规定的长度来分配存储空间。这是否意味着CHAR的数据类型劣于VARCHAR 呢?其实不然。否则的话,就没有必要存在CHAR字符类型了。虽然VARCHAR数据类型可以节省存储空间,提高数据处理的效率。但是其可变长度带来的一 些负面效应,有时候会抵消其带来的优势。为此在某些情况下,还是需要使用Char数据类型。

    ② 使用建议

    1.根据字符的长度来判断,是考虑其长度的是否相近来确定选择char还是varchar,如何字段的长度基本都是一样或者其长度总是近似的可以选用char

    2.是从碎片角度进行考虑
    用可变长度的字符型数据时,数据库管理员要时不时的对碎片进行整理。如执行数据库导出导入作业,来消除碎片。

    3.即使使用Varchar数据类型,也不能够太过于慷慨!
    比如你只使用到90个字符,VARCHAR(100)与VARCHAR(200)真的相同吗?结果是否定的。虽然他们用来存储90个字符的数据,其存储空间相同。但是对于内存的消耗是不同的。


    ③.varchar类型的变化

    1.varchar类型的变化

    MySQL 数据库的varchar类型在4.1以下的版本中的最大长度限制为255,其数据范围可以是0~255或1~255(根据不同版本数据库来定)。在 MySQL5.0以上的版本中,varchar数据类型的长度支持到了65535,也就是说可以存放65532个字节的数据,起始位和结束位占去了3个字节,也就是说,在4.1或以下版本中需要使用固定的TEXT或BLOB格式存放的数据可以使用可变长的varchar来存放,这样就能有效的减少数据库文件的大小。

    MySQL 数据库的varchar类型在4.1以下的版本中,nvarchar(存储的是Unicode数据类型的字符)不管是一个字符还是一个汉字,都存为2个字节 ,一般用作中文或者其他语言输入,这样不容易乱码 ;varchar: 汉字是2个字节,其他字符存为1个字节 ,varchar适合输入英文和数字。

    4.0版本以下,varchar(20),指的是20字节,如果存放UTF8汉字时,只能存6个(每个汉字3字节) ;5.0版本以上,varchar(20),指的是20字符,无论存放的是数字、字母还是UTF8汉字(每个汉字3字节),都可以存放20个,最大大小是65532字节 ;varchar(20)在Mysql4中最大也不过是20个字节,但是Mysql5根据编码不同,存储大小也不同,具体有以下规则:

    a) 存储限制

    varchar 字段是将实际内容单独存储在聚簇索引之外,内容开头用1到2个字节表示实际长度(长度超过255时需要2个字节),因此最大长度不能超过65535。

    b) 编码长度限制

    字符类型若为gbk,每个字符最多占2个字节,最大长度不能超过32766;

    字符类型若为utf8,每个字符最多占3个字节,最大长度不能超过21845。

    若定义的时候超过上述限制,则varchar字段会被强行转为text类型,并产生warning。

    c) 行长度限制

    导致实际应用中varchar长度限制的是一个行定义的长度。 MySQL要求一个行的定义长度不能超过65535。若定义的表长度超过这个值,则提示

    ERROR 1118 (42000): Row size too large. The maximum row size for the used table type, not counting BLOBs, is 65535. You have to change some columns to TEXT or BLOBs。

    2.CHAR(M), VARCHAR(M)不同之处

    CHAR(M)定义的列的长度为固定的,M取值可以为0~255之间,当保存CHAR值时,在它们的右边填充空格以达到指定的长度。当检索到CHAR值时,尾部的空格被删除掉。在存储或检索过程中不进行大小写转换。CHAR存储定长数据很方便,CHAR字段上的索引效率级高,比如定义char(10),那么不论你存储的数据是否达到了10个字节,都要占去10个字节的空间,不足的自动用空格填充。

    VARCHAR(M)定义的列的长度为可变长字符串,M取值可以为0~65535之间,(VARCHAR的最大有效长度由最大行大小和使用的字符集确定。整体最大长度是65,532字节)。VARCHAR值保存时只保存需要的字符数,另加一个字节来记录长度(如果列声明的长度超过255,则使用两个字节)。VARCHAR值保存时不进行填充。当值保存和检索时尾部的空格仍保留,符合标准SQL。varchar存储变长数据,但存储效率没有CHAR高。如果一个字段可能的值是不固定长度的,我们只知道它不可能超过10个字符,把它定义为 VARCHAR(10)是最合算的。VARCHAR类型的实际长度是它的值的实际长度+1。为什么”+1”呢?这一个字节用于保存实际使用了多大的长度。从空间上考虑,用varchar合适;从效率上考虑,用char合适,关键是根据实际情况找到权衡点。

    CHAR和VARCHAR最大的不同就是一个是固定长度,一个是可变长度。由于是可变长度,因此实际存储的时候是实际字符串再加上一个记录字符串长度的字节(如果超过255则需要两个字节)。如果分配给CHAR或VARCHAR列的值超过列的最大长度,则对值进行裁剪以使其适合。如果被裁掉的字符不是空格,则会产生一条警告。如果裁剪非空格字符,则会造成错误(而不是警告)并通过使用严格SQL模式禁用值的插入。

    1. VARCHAR和TEXT、BlOB类型的区别

    VARCHAR,BLOB和TEXT类型是变长类型,对于其存储需求取决于列值的实际长度(在前面的表格中用L表示),而不是取决于类型的最大可能尺寸。例如,一个VARCHAR(10)列能保存最大长度为10个字符的一个字符串,实际的存储需要是字符串的长度 ,加上1个字节以记录字符串的长度。对于字符串’abcd’,L是4而存储要求是5个字节。

    BLOB和TEXT类型需要1,2,3或4个字节来记录列值的长度,这取决于类型的最大可能长度。VARCHAR需要定义大小,有65535字节的最大限制;TEXT则不需要。如果你把一个超过列类型最大长度的值赋给一个BLOB或TEXT列,值被截断以适合它。

    一个BLOB是一个能保存可变数量的数据的二进制的大对象。4个BLOB类型TINYBLOB、BLOB、MEDIUMBLOB和LONGBLOB仅仅在他们能保存值的最大长度方面有所不同。

    BLOB 可以储存图片,TEXT不行,TEXT只能储存纯文本文件。4个TEXT类型TINYTEXT、TEXT、MEDIUMTEXT和LONGTEXT对应于4个BLOB类型,并且有同样的最大长度和存储需求。在BLOB和TEXT类型之间的唯一差别是对BLOB值的排序和比较以大小写敏感方式执行,而对TEXT值是大小写不敏感的。换句话说,一个TEXT是一个大小写不敏感的BLOB。

    4.总结char,varchar,text区别

    长度的区别,char范围是0~255,varchar最长是64k,但是注意这里的64k是整个row的长度,要考虑到其它的column,还有如果存在not null的时候也会占用一位,对不同的字符集,有效长度还不一样,比如utf8的,最多21845,还要除去别的column,但是varchar在一般情况下存储都够用了。如果遇到了大文本,考虑使用text,最大能到4G。

    效率来说基本是char>varchar>text,但是如果使用的是Innodb引擎的话,推荐使用varchar代替char

    char和varchar可以有默认值,text不能指定默认值

    数据库选择合适的数据类型存储还是很有必要的,对性能有一定影响。这里在零碎记录两笔,对于int类型的,如果不需要存取负值,最好加上unsigned;对于经常出现在where语句中的字段,考虑加索引,整形的尤其适合加索引。

    参考文献

    类型可以存储最大字符数 http://dev.mysql.com/doc/refman/5.7/en/string-type-overview.html

    类型所占字节数 http://dev.mysql.com/doc/refman/5.7/en/storage-requirements.html

    http://blog.163.com/liyinhui20080527@126/blog/static/815232582013884517483/

    http://www.jb51.net/article/55853.htm

    展开全文
  • mysql中char与varchar区别

    千次阅读 2019-10-17 09:30:15
    在mySQL 中charvarchar 都是存储字符串的,区别在于char有固定的长度,而varchar属于可变长的字符类型。 char(M)类型的数据列里,每个值都占用M个字节,如果某个长度小于M,MySQL就会在它的右边用空格字符补足...

    在mySQL 中char 和 varchar 都是存储字符串的,区别在于char有固定的长度,而varchar属于可变长的字符类型。

    char(M)类型的数据列里,每个值都占用M个字节,如果某个长度小于M,MySQL就会在它的右边用空格字符补足.(在检索操作中那些填补出来的空格字符将被去掉)在varchar(M)类型的数据列里,每个值只占用刚好够用的字节再加上一个用来记录其长度的字节(即总长度为L+1字节)。

    char 固定长度,所以在处理速度上要比varchar快速很多,但是对费存储空间,所以对存储不大,但在速度上有要求的可以使用char类型。

    定长的char的优势:
    一,存储很短的信息,比如门牌号码101,201……这样很短的信息应该用char,因为varchar还要占1个byte用于存储信息长度,本来打算节约存储的现在得不偿失。

    二,固定长度的。比如使用uuid作为主键,那用char应该更合适。因为他固定长度,varchar动态根据长度的特性就消失了,而且还要占1个长度信息。

    三,十分频繁改变的column。因为varchar每次存储都要有额外的计算,得到长度等工作,如果一个非常频繁改变的,那就要有很多的精力用于计算,而这些对于char来说是不需要的。

    总的说来:char定长,存储效率不如varchar,对于短数据的查询优于varchar。因为在大数据量没有索引的情况下,mysql查询走的是主键创建的索引,通过主键查询,数据量大效率的瓶颈是磁盘的io,当数据量大的时候,char是固定长度,占用的磁盘空间较大,查询效率就降低。在不同的场景下,瓶颈是不同的。
     

    展开全文
  • 本文主要介绍了mysql中VARCHAR与CHAR字符型数据的差异以及这两种字符型数据在项目中的使用建议,真心不错。值得一看。小编有种受益匪浅的感觉。
  • 文章目录1)CHARVARCHAR字符型数据2)存储方式的区别*如果插入的字符串的长度已经大于可以插入的最大值?Varchar数据类型的最大长度能不能设置很大?3)选择Varchar还是Char数据类型?3.1 根据字符的长度来判断3.2...



    字符串类型是在数据库中存储字符串的数据类型,字符串类型包括char,varchar,text,enum和set。

    • 在数据库中,字符型的数据是最多的,可以占到整个数据库的80%以上。为此正确处理字符型的数据,对于提高数据库的性能有很大的作用
    • 在字符型数据中,用的最多的就是Char与Varchar两种类型。前面的是固定长度,而后面的是可变长度。

    1)CHAR和VARCHAR字符型数据

    CHAR 和VARCHAR 很类似,都用来保存MySQL中较短的字符串

    • 都是在创建表时指定了最大长度,其基本形式:字符串类型(M)。其中:

      • 字符串类型参数指定了数据类型是char类型还是varchar类型
      • M参数指定了该字符串的最大长度为M
      CREATE TABLE IF NOT EXISTS stuinfo(
      	stuId INT,
      	stuName VARCHAR(20),
      	gender CHAR,
      	bornDate DATETIME
      );
      
      mysql> CREATE TABLE cdefault(c char);
      Query OK, 0 rows affected (0.03 sec)
      
      mysql> desc cdefault;  # 对于mysql 5.7,char默认长度为1
      +-------+---------+------+-----+---------+-------+
      | Field | Type    | Null | Key | Default | Extra |
      +-------+---------+------+-----+---------+-------+
      | c     | char(1) | YES  |     | NULL    |       |
      +-------+---------+------+-----+---------+-------+
      1 row in set (0.01 sec)
      
      mysql> select version();
      +-----------+
      | version() |
      +-----------+
      | 5.7.26    |
      +-----------+
      1 row in set (0.01 sec)
      
    • CHAR 列的长度固定为创建表时声明的长度,长度可以为从0~255 的任何值。

    • VARCHAR 列中的值为可变长字符串,长度可以指定为0~255(MYSQL 5.0.3 以前)或者65535(5.0.3以后)之间的值。


    2)存储方式的区别

    VARCHAR与CHAR两种字符型数据类型相比,最大的差异就是前者是可变长度,而后者则是固定长度

    • 在存储时,前者会根据实际存储的数据来分配最终的存储空间。
    • 而后者则不管实际存储数据的长度,都是根据CHAR规定的长度来分配存储空间。

    二者的主要区别在于存储方式的不同

    • Char采用的是固定长度的存储方式。
      • 保存CHAR值时,在它们的右边填充空格以达到指定的长度。
      • 检索到CHAR值时,尾部的空格被删除掉
      • 在存储或检索过程中不进行大小写转换。
      • 保存数据时,即使没有达到最大的长度,系统也会为其分配这么多的存储空间。显然,这种存储方式会造成磁盘空间的浪费
      • char存储定长数据很方便,char字段上的索引效率很高。

    • Varchar用来保存可变长度的字符串。
      • VARCHAR的最大有效长度由最大行大小和使用的字符集确定。整体最大长度是65,532字节。
      • 当值保存和检索时尾部的空格仍保留,符合标准SQL。
      • varchar值保存时只保存需要的字符数,另加一个字节来记录长度(长度超过255时需要2个字节)。
      • 通常情况下,由于系统会根据实际存储的数据量来分配合适的存储空间,VARCHAR数据类型能够节约磁盘空间,为此往往认为其能够提升数据库的性能。
      • 但在提升性能的同时,往往也会因为其长度是可变的,从而在数据进行更新时可能会导致一些额外的工作
        • 如在更改前,其字符长度是10位(Varchar规定的最长字符数假设是50位),此时系统就只给其分配10个存储的位置(假设不考虑系统自身的开销)。
        • 更改后,其数据量达到了20位。由于没有超过最大50位的限制,为此数据库还是允许其存储的。只是其原先的存储位置已经无法满足其存储的需求,此时系统就需要进行额外的操作。如根据存储引擎不同,有的会采用拆分机制,而有的则会采用分页机制。

    检索的时候,CHAR 列删除了尾部的空格,而VARCHAR 则保留这些空格。通过给表vc 中的VARCHAR(4)和char(4)字段插入相同的字符串来描述这个区别:

    	mysql> use learn1;
    	Database changed
    	mysql> CREATE TABLE vc(v VARCHAR(4), c CHAR(4));  # 创建测试表vc,并定义两个字段v VARCHAR(4)和c CHAR(4)
    	Query OK, 0 rows affected (0.04 sec)
    	
    	mysql> INSERT INTO vc VALUES('ab ','ab ');  # v 和c 列中同时插入字符串“ab ”,注意最后是有一个空格的
    	Query OK, 1 row affected (0.01 sec)
    	
    	mysql> SELECT length(v),length(c) FROM vc;  # 显示查询结果,可以发现,c 字段的length 只有2
    	+-----------+-----------+
    	| length(v) | length(c) |
    	+-----------+-----------+
    	|         3 |         2 |
    	+-----------+-----------+
    	1 row in set (0.01 sec)
    	
    	mysql> SELECT CONCAT(v,'+'),CONCAT(c,'+') FROM vc;  # 给两个字段分别追加一个“+”字符看得更清楚
    	+---------------+---------------+
    	| CONCAT(v,'+') | CONCAT(c,'+') |
    	+---------------+---------------+
    	| ab +          | ab+           |
    	+---------------+---------------+
    	1 row in set (0.00 sec)
    
    • *如果插入的字符串的长度已经大于可以插入的最大值?

      比如说,现在我们定义2个char类型和varchar类型的字段,长度都为5,但是我们插入的值是‘123456’,那么系统就会阻止这个值的插入然后报错。

      mysql> CREATE TABLE maxtest(v varchar(5),c char(5));
      Query OK, 0 rows affected (0.04 sec)
      
      mysql> INSERT INTO maxtest VALUES('1','123456');
      ERROR 1406 (22001): Data too long for column 'c' at row 1
      mysql> INSERT INTO maxtest VALUES('123456','1');
      ERROR 1406 (22001): Data too long for column 'v' at row 1
      
    • Varchar数据类型的最大长度能不能设置很大?

      不能。对于Varchar数据类型来说,硬盘上的存储空间虽然都是根据实际字符长度来分配存储空间的,但是对于内存来说,则是使用固定大小的内存块来保存值。

      比如现在用户需要存储一个地址信息。根据评估,只要使用100个字符就可以了。VARCHAR(100)与VARCHAR(200)用来存储90个字符的数据,其存储空间相同,但是对于内存的消耗是不同的在内存中,是使用字符类型中定义的长度,即200个字符空间。这对于排序或者临时表(这些内容都需要通过内存来实现)作业会产生比较大的不利影响

      • 所以如果某些字段会涉及到文件排序或者基于磁盘的临时表时,分配VARCHAR数据类型时仍然不能够太过于慷慨。还是要评估实际需要的长度,然后选择一个最长的字段来设置字符长度。如果为了考虑冗余,可以留10%左右的字符长度。千万不能认为其为根据实际长度来分配存储空间,而随意地分配长度。

    3)选择Varchar还是Char数据类型?

    3.1 根据字符的长度来判断

    1、在实际项目中, 如果某个字段的字符长度比较短,则一般是采用固定字符长度。因为varchar还要占个byte用于存储信息长度。

    比如人的名字,其最长的长度也是有限的。通常分配18个字符长度即可。
    此时虽然每个人的名字长度有可能不同,但是即使为其分配了固定长度的字符类型,即18个字符长度,最后浪费的空间也不是很大
    而如果采用NVARCHAR数据类型时,万一以后需要改名,而原先的存储空间不足用来容纳新的值,反而会造成一些额外的工作。在这种情况下,进行均衡时,会认为采用CHAR固定长度的数据类型更好。

    2、如果字符串的最大长度比平均长度大很多,即列长度经常变动较大的情况,通常选择Varchar。

    3、如果某个字段的长度虽然比较长,但是其长度总是近似的,如一般在90个到100个字符之间,甚至是相同的长度。此时比较适合采用CHAR字符类型。

    • 比较典型的应用就是MD5哈希值。当利用MD5哈希值来存储用户密码时,就非常使用采用CHAR字符类型。因为其长度是相同的。
    • 另外,像用来存储用户的身份证号码等等,一般也建议使用CHAR类型的数据。

    3.2 从存储碎片角度考虑

    • 使用CHAR字符型时,由于存储空间都是一次性分配的,所以某个字段的内容都是存储在一起的。单从这个角度来讲,其不存在碎片的困扰
    • 而可变长度的字符数据类型,其存储的长度是可变的。当更改前后数据长度不一致时,就不可避免地会出现碎片的问题
      • 故使用可变长度的字符型数据时,数据库管理员要时不时地对碎片进行整理,如执行数据库导出导入作业,来消除碎片。

    3.3 从表存储引擎的类型考虑

    常见的mysql表引擎有INNODB和MyISAM,主要的区别是INNODB适合频繁写数据库操作,MyISAM适合读取数据库的情况多一点。

    • MyISAM管理非事务表,提供高速存储和检索以及全文搜索能力,如果再应用中执行大量select操作,应该选择MyISAM。如果数据表涉及的存储数据多、查询多,用myisam,如文章表。
    • InnoDB用于事务处理,具有ACID事务支持等特性,如果在应用中执行大量insert和update操作,应该选择InnoDB。如果数据表涉及业务逻辑多,增删改操作多,就用innodb,如订单表。
    • 对于MyISAM表,尽量使用Char,对于那些经常需要修改而容易形成碎片的myisam和isam数据表就更是如此,它的缺点就是占用磁盘空间。
    • 对于InnoDB表,因为它的数据行内部存储格式对固定长度的数据行和可变长度的数据行不加区分(所有数据行共用一个表头部分,这个表头部分存放着指向各有关数据列的指针),所以使用char类型不见得会比使用varchar类型好。
      • 事实上,因为char类型通常要比varchar类型占用更多的空间,所以从减少空间占用量和减少磁盘i/o的角度,使用varchar类型反而更有利


    【部分内容参考自】

    • Mysql 数据库字符类型详解:https://www.cnblogs.com/xuchunlin/p/6235369.html
    • MySQL数据库char与varchar的区别分析及使用建议:https://www.jb51.net/article/55366.htm
    • char与varchar类型区别的深度剖析:https://blog.csdn.net/qq_34858648/article/details/77881176
    展开全文
  • char与varchar区别

    2021-06-23 11:45:19
    CHAR是一种固定长度的类型,而VARCHAR则是一种可变长度的类型。 在CHAR(M)类型的数据列内,每个值要占M个字节,若小于M,则MySQL会在它的右边用空格来补足,但在查询时,这些空格会被去掉。 在VARCHAR(M)类型的数据...
  • char与varchar类型区别的深度剖析

    万次阅读 多人点赞 2017-09-07 16:23:49
    charvarchar这两种类型是我们经常使用的类型,在使用的时候大家也没有特别注意有什么区别,好奇心驱使我对其进行探究,经过查阅一番资料手册以及做的小测试,有了一定程度的了解,特此记录下来!  手册中有提到:...
  • charvarchar区别

    千次阅读 2021-03-16 23:32:44
    char类型的长度是固定的,varchar的长度是可变的。
  • 数据库中char与varchar区别

    千次阅读 2022-03-10 16:59:37
    1.char类型的长度是固定的,varchar的长度是可变的。 2. char类型的效率比varchar的效率稍高。 3.底层存储方式不同,char的存储方式是:对英文字符(ASCII)占用一个字节,对一个汉字占用两个字节;而varchar的...
  • mysql char与varchar区别

    2021-01-19 19:48:45
    CHARVARCHAR 类型类似,都用来存储字符串,但它们保存和检索的方式不同。CHAR属于固定长度的字符类型,而VARCHAR 属于可变长度的字符类型。mysql> CREATE TABLE vc (v VARCHAR(4), c CHAR(4));mysql> ...
  • charvarchar区别 char是一种固定长度的类型,varchar则是一种可变长度的类型 char是定长的,也就是当你输入的字符小于你指定的数目时,它会在后面不空值。(查询时结果中空值被去除) varchar的长度为n个字节的...
  • MySQL数据库的varchar类型在5.0.3以下的版本中的最大长度限制为255,其数据范围可以是0~255
  • char与varchar区别char(100)类型的字段一旦定义,不管里面是否有值,固定占用100个字符对应的存储空间,这种对空间的利用率其实并不高,但是效率较快。varchar(100)类型的字段定义后,它所占用的空间就是里面...
  • 一、首先来说下字符字节的区别: 字符字节它们完全不是一个位面的概念,所以两者之间没有“区别”这一说法。在不同编码里,字符和字节的对应关系是不同的。一般来说,半角英文状态下一个字母或数字(称之为字符...
  • 数据库中char与varchar类型的区别

    千次阅读 2018-10-10 19:06:55
    在建立数据库表结构的时候,为了给一个String类型的数据定义一个数据库的数据库类型,一般参考的都是char或者varchar,这两种选择有时候让人很纠结,今天想总结一下它们两者的区别,明确一下两者的区别。 首先明确...
  • char与varchar区别char (13)长度固定, 如'1234567890' 存储需要空间 10个字符;varchar(13) 可变长 如'1234567890' 需要存储空间 11字符;从上面可以看得出来char 长度是固定的,不管你存储的数据是多少他都会都固定...
  • MySQL中CHARVARCHAR区别

    千次阅读 2020-12-09 09:39:03
    以下都是基于mysql5.0以上版本而言,也就是charvarchar括号内指定的都是最大字符数,话不多说先上结论: 行为 char字段 varchar字段 最大长度 255字符 括号中最大的字符数通过编码来算,不超过行65535个...
  • 在本篇文章中我们给大家分享了关于MySQL中int、char以及varchar的性能对比的相关内容,有兴趣的朋友们学习下。

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 276,331
精华内容 110,532
关键字:

char与varchar的区别