精华内容
下载资源
问答
  • varchar char

    千次阅读 2019-09-21 22:44:37
    需要视你的具体需要确定,如tj_dns(愉快的登山者)所说,对于长度不大或者是定长的数据使用char好,比如记录IP地址,如果你不确定具体多长,在设置了足够的长度时,使用varchar可以节省空间,但不如char效率高。...

    varchar只是变长(最大长度限制下)的char,需要视你的具体需要确定,如tj_dns(愉快的登山者)所说,对于长度不大或者是定长的数据使用char好,比如记录IP地址,如果你不确定具体多长,在设置了足够的长度时,使用varchar可以节省空间,但不如char效率高。

    要注意的是:varchar是不会自动添加空格的,而char会添加空格补足长度,这个时候,如果进行处理,可能要进行rtrim的处理,但对于char(10),如果你的内容为"char "时,就没有办法确定具体值,比如密码,有时候需要把空格也当作密码,而使用char则不能满足。

    展开全文
  • varchar和char

    2014-03-18 13:19:36
    占用存储空间:varchar是可变长度,char是定长。 比如:varchar(20)的字段存"123"需要 4 个字节来存储,多一个字节来记录长度。  char(20)的字段存"123"需要20个字节来存储。 建议固定长度的字段用char...

    用三点来讲解


    占用存储空间varchar是可变长度,char是定长。


    比如:varchar(20)的字段存"123"需要 4 个字节来存储,多一个字节来记录长度。

                    char(20)的字段存"123"需要20个字节来存储。


    建议固定长度的字段用char,不定长的字段用varchar,这样节省存储空间。



    内存申请空间都是定长的。


    比如:varchar(20)的字段内存申请空间需要20字节。

                    char(20)的字段内存申请空间需要20字节。


    建议固定长度的字段用char,不定长的字段用varchar,这样节省内存空间。


    使用速度char类型运行效率较快。

    展开全文
  • MySQL——VARCHAR和CHAR类型

    万次阅读 多人点赞 2019-05-03 15:04:57
    VARCHAR和CHAR是两种最主要的字符串类型。不幸的是,很难精确地解释这些值是怎么存储在磁盘和内存中的,因为这跟存储引擎的具体实现有关。下面的描述假设使用的存储引擎是InnoDB和/或者MyISAM。如果使用的不是这两种...

    前述

    VARCHAR和CHAR是两种最主要的字符串类型。不幸的是,很难精确地解释这些值是怎么存储在磁盘和内存中的,因为这跟存储引擎的具体实现有关。下面的描述假设使用的存储引擎是InnoDB和/或者MyISAM。如果使用的不是这两种存储引擎,请参考所使用的存储引擎的文档。

    先看看VARCHAR和CHAR值通常在磁盘上怎么存储。请注意,存储引擎存储CHAR或者VARCHAR值的方式在内存中和在磁盘上可能不一样,所以MySQL服务器从存储引擎读出的值可能需要转换为另一种存储格式。

    VARCHAR类型

    VARCHAR类型用于存储可变长字符串,是最常见的字符串数据类型。它比定长类型更节省空间,因为它仅使用必要的空间(例如,越短的字符串使用越少的空间)。有一种情况例外,如果MySQL表使用ROW_FORMAT=FIXED创建的话,每一行都会使用定长存储,这会很浪费空间。

    VARCHAR需要使用1或2个额外字节记录字符串的长度:如果列的最大长度小于或等于255字节,则只使用1个字节表示,否则使用2个字节。假设采用latin1字符集,一个VARCHAR(10)的列需要11个字节的存储空间。VARCHAR(1000)的列则需要1002个字节,因为需要2个字节存储长度信息。

    VARCHAR节省了存储空间,所以对性能也有帮助。但是,由于行是变长的,在UPDATE时可能使行变得比原来更长,这就导致需要做额外的工作。如果一个行占用的空间增长,并且在页内没有更多的空间可以存储,在这种情况下,不同的存储引擎的处理方式是不一样的。例如,MyISAM会将行拆成不同的片段存储,InnoDB则需要分裂页来使行可以放进页内。其他一些存储引擎也许从不在原数据位置更新数据。

    VARCHAR适用情况

    下面这些情况下适用VARCHAR是合适的:

    • 字符串列的最大长度比平均长度大很多
    • 列的更新很少,所以碎片不是问题
    • 使用了像UTF-8这样复杂的字符集,每个字符都使用不同的字节数进行存储

    CHAR类型

    CHAR类型是定长的:MySQL总是根据定义的字符串长度分配足够的空间。当存储CHAR值时,MySQL会删除所有的末尾空格。CHAR值会根据需要采用空格进行填充以方便比较。

    CHAR适合存储很短的字符串,或者所有值都接近同一个长度。例如,CHAR非常适合存储密码的MD5值,因为这是一个定长的值。对于经常变更的数据,CHAR也比VARCHAR更好,因为定长的CHAR类型不容易产生碎片。对于非常短的列,CHAR比VARCHAR在存储空间上也更有效率。例如用CHAR(1)来存储只有Y和N的值,如果采用单字节字符集只需要一个字节,但是VARCHAR(1)却需要两个字节,因为还有一个记录长度的额外字节。

    测试

    下面通过例子来具体说明CHAR与VARCHAR行为上的不同,首先,我们创建一张只有一个CHAR(10)字段的表,并且往里面插入一些值:

    CREATE TABLE char_test
    (
        char_col CHAR(10)
    );
    
    INSERT INTO char_test 
    VALUES
        ('string1').
        ('  string2').
        ('string3  ');

    当我们检索这些值的时候,会发现string3末尾的空格被截断了。

    SELECT CONCAT("'", char_col, "'")
    FROM char_test;
    执行结果

     

    如果用VARCHAR(10)字段存储相同的值,可以得到如下结果:

    CREATE TABLE varchar_test
    (
        varchar_col VARCHAR(10)
    );
    
    INSERT INTO varchar_test 
    VALUES
        ('string1').
        ('  string2').
        ('string3  ');
    
    SELECT CONCAT("'", varchar_col, "'")
    FROM varchar_test;
    执行结果

     

    VARCHAR(5)与VARCHAR(200)的区别

    我们倘若用VARCHAR(5)和VARCHAR(200)来存储'hello',我们知道这两者的空间开销是一样的。那么我们可以让VARCHAR的长度始终保持很大吗?使用更短的列有什么优势吗?

    事实证明有很大的优势。更长的列会消耗更多的内存,因为MySQL通常会分配固定大小的内存块来保存内部值。尤其是使用内存临时表进行排序或操作时会特别糟糕。在利用磁盘临时表进行排序时也同样糟糕。

    所以最好的策略是只分配真正需要的空间。

    总结

    当我们为字符串类型的字段选取类型的时候,判断该选取VARCHAR还是CHAR,我们可以从以下几个方面来考虑:

    • 该字段数据集的平均长度与最大长度是否相差很小,若相差很小优先考虑CHAR类型,反之,考虑VARCHAR类型。
    • 若字段存储的是MD5后的哈希值,或一些定长的值,优先选取CHAR类型。
    • 若字段经常需要更新,则优先考虑CHAR类型,由于CHAR类型为定长,因此不容易产生碎片。
    • 对于字段值存储很小的信息,如性别等,优先选取CHAR类型,因为VARCHAR类型会占用额外的字节保存字符串长度信息。

    总之一句话,当我们能够选取CHAR类型的时候,或者说空间消耗相对并不是影响因素的重点时,尽量选取CHAR类型,因为在其他方面,CHAR类型都有着或多或少的优势。而当空间消耗成为了很大的影响因素以后,我们则考虑使用VARCHAR类型。

    展开全文
  • MySQL VARCHAR和CHAR类型

    千次阅读 2019-12-10 10:55:21
    VARCHAR和CHAR是两种最主要的字符串类型。不幸的是,很难精确地解释这些值是怎么存储在磁盘和内存中的,因为这跟存储引擎的具体实现有关。下面的描述假设使用的存储引擎是InnoDB和/或者MyISAM。如果使用的不是这两种...

    前述

    VARCHAR和CHAR是两种最主要的字符串类型。不幸的是,很难精确地解释这些值是怎么存储在磁盘和内存中的,因为这跟存储引擎的具体实现有关。下面的描述假设使用的存储引擎是InnoDB和/或者MyISAM。如果使用的不是这两种存储引擎,请参考所使用的存储引擎的文档。

    先看看VARCHAR和CHAR值通常在磁盘上怎么存储。请注意,存储引擎存储CHAR或者VARCHAR值的方式在内存中和在磁盘上可能不一样,所以MySQL服务器从存储引擎读出的值可能需要转换为另一种存储格式。

    VARCHAR类型

    VARCHAR类型用于存储可变长字符串,是最常见的字符串数据类型。它比定长类型更节省空间,因为它仅使用必要的空间(例如,越短的字符串使用越少的空间)。有一种情况例外,如果MySQL表使用ROW_FORMAT=FIXED创建的话,每一行都会使用定长存储,这会很浪费空间。

    VARCHAR需要使用1或2个额外字节记录字符串的长度:如果列的最大长度小于或等于255字节,则只使用1个字节表示,否则使用2个字节。假设采用latin1字符集,一个VARCHAR(10)的列需要11个字节的存储空间。VARCHAR(1000)的列则需要1002个字节,因为需要2个字节存储长度信息。

    VARCHAR节省了存储空间,所以对性能也有帮助。但是,由于行是变长的,在UPDATE时可能使行变得比原来更长,这就导致需要做额外的工作。如果一个行占用的空间增长,并且在页内没有更多的空间可以存储,在这种情况下,不同的存储引擎的处理方式是不一样的。例如,MyISAM会将行拆成不同的片段存储,InnoDB则需要分裂页来使行可以放进页内。其他一些存储引擎也许从不在原数据位置更新数据。

    VARCHAR适用情况

    下面这些情况下适用VARCHAR是合适的:

    • 字符串列的最大长度比平均长度大很多
    • 列的更新很少,所以碎片不是问题
    • 使用了像UTF-8这样复杂的字符集,每个字符都使用不同的字节数进行存储

    CHAR类型

    CHAR类型是定长的:MySQL总是根据定义的字符串长度分配足够的空间。当存储CHAR值时,MySQL会删除所有的末尾空格。CHAR值会根据需要采用空格进行填充以方便比较。

    CHAR适合存储很短的字符串,或者所有值都接近同一个长度。例如,CHAR非常适合存储密码的MD5值,因为这是一个定长的值。对于经常变更的数据,CHAR也比VARCHAR更好,因为定长的CHAR类型不容易产生碎片。对于非常短的列,CHAR比VARCHAR在存储空间上也更有效率。例如用CHAR(1)来存储只有Y和N的值,如果采用单字节字符集只需要一个字节,但是VARCHAR(1)却需要两个字节,因为还有一个记录长度的额外字节。

    测试

    下面通过例子来具体说明CHAR与VARCHAR行为上的不同,首先,我们创建一张只有一个CHAR(10)字段的表,并且往里面插入一些值:

    CREATE TABLE char_test
    (
        char_col CHAR(10)
    );
     
    INSERT INTO char_test 
    VALUES
        ('string1').
        ('  string2').
        ('string3  ');
    

    当我们检索这些值的时候,会发现string3末尾的空格被截断了。

    SELECT CONCAT("'", char_col, "'")
    FROM char_test;
    
    执行结果

     

    如果用VARCHAR(10)字段存储相同的值,可以得到如下结果:

    CREATE TABLE varchar_test
    (
        varchar_col VARCHAR(10)
    );
     
    INSERT INTO varchar_test 
    VALUES
        ('string1').
        ('  string2').
        ('string3  ');
     
    SELECT CONCAT("'", varchar_col, "'")
    FROM varchar_test;
    
    执行结果

     

    VARCHAR(5)与VARCHAR(200)的区别

    我们倘若用VARCHAR(5)和VARCHAR(200)来存储'hello',我们知道这两者的空间开销是一样的。那么我们可以让VARCHAR的长度始终保持很大吗?使用更短的列有什么优势吗?

    事实证明有很大的优势。更长的列会消耗更多的内存,因为MySQL通常会分配固定大小的内存块来保存内部值。尤其是使用内存临时表进行排序或操作时会特别糟糕。在利用磁盘临时表进行排序时也同样糟糕。

    所以最好的策略是只分配真正需要的空间。

    总结

    当我们为字符串类型的字段选取类型的时候,判断该选取VARCHAR还是CHAR,我们可以从以下几个方面来考虑:

    • 该字段数据集的平均长度与最大长度是否相差很小,若相差很小优先考虑CHAR类型,反之,考虑VARCHAR类型。
    • 若字段存储的是MD5后的哈希值,或一些定长的值,优先选取CHAR类型。
    • 若字段经常需要更新,则优先考虑CHAR类型,由于CHAR类型为定长,因此不容易产生碎片。
    • 对于字段值存储很小的信息,如性别等,优先选取CHAR类型,因为VARCHAR类型会占用额外的字节保存字符串长度信息。

    总之一句话,当我们能够选取CHAR类型的时候,或者说空间消耗相对并不是影响因素的重点时,尽量选取CHAR类型,因为在其他方面,CHAR类型都有着或多或少的优势。而当空间消耗成为了很大的影响因素以后,我们则考虑使用VARCHAR类型。

    展开全文
  • 数据库 varchar 和char区别
  • varchar和char

    2006-03-29 20:51:00
    今天我在sql sever2000中定义了一个password的字段为char(50),后来测试时发现里面的数字为12345,可是读出来的却为"12345 ",有很多的空格。对照其他varchar型的却没有这个错误。 后来上网查了一下才发现原来他们...
  • varchar和char的区别

    千次阅读 2016-04-20 18:36:49
    varchar和char的区别
  • varchar和char的区别: 1、varchar在存取方面与char相反,它存取慢,因为长度不固定,但正因如此,不占据多余的空间,是时间换空间的做法; 2、对于varchar来说, 多能存放的字符个数为65532 总之,结合性能角度...
  • VARCHAR CHAR 是两种最主要得字符串类型。 不幸的是,很难精确地解释这些值是怎么存储在磁盘内存中的,因为这跟存储引擎的具体实现有关。下面的描述假设使用的存储引擎是 InnoDB / 或者 MyISAM。如果使用的...
  • varchar 和char类型是两种最重要的字符串类型,在存储引擎是InnoDB或MyISAM下,讨论varchar和char。 一、varchar类型: varchar:用于可变长字符串,是最常见的字符串数据类型。它比定长类型更节省空间,按照存储...
  • 默认的字符编码和排序方式为 utf8mb4和utf8mb4_0900_ai_ci ...注意:VARCHAR和CHAR都是MySQL的字符串类型,存储多个字符、可设置最大存储的字符数,存储开销都与数据长度、字符集有关。 CHAR和VARCHAR具
  • varchar和char 的区别,varchar最大长度

    千次阅读 2019-07-04 15:39:43
    一. varchar存储规则: 4.0版本以下,varchar(20),指的是20字节,如果存放UTF8汉字时,只能存6个(每个汉字3字节) 5.0版本以上,varchar(20),指的... varchar和char 的区别: char是一种固定长度的类型,varcha...
  • MySQL varchar和char类型

    2015-03-18 00:09:00
    varchar和char是两种最主要的字符串类型。不幸的是,很难精确地解释这些值是怎么储存在磁盘和内存中的,因为这根存储引擎的具体实现有关。下面的描述假设使用的存储引擎是InnoDB或者MyISAM。如果使用的不是这两种...
  • 数据库中varchar和char的比较

    千次阅读 2014-09-24 17:20:36
    varchar和char的比较
  • 学过MySQL的同学都知道MySQL中varchar和char是两种最主要的字符串类型,varchar是变长的类型,而char是固定长度。那关于如何选择类型就成为令人头疼的事,很多初学者为了保证业务兼容性强,存储字符串类型一律都是...
  • 首先,VARCHAR和CHAR是两种最主要的字符串类型。在设计用于存储字符串的表字段时,可能会对到底选哪个类型有所犹豫,确实如果不了解它们之间的区别,选择上不会那么容易,...
  • 数据库–关于varchar和char的区别 1.定长和变长 char 表示定长,长度固定;最大长度为255字符; char(20),指的是20个字符,如果存放的字符小于20时,多余空间会自动填充空格 varchar的最大长度为65535即2^16字节...
  • varchar和char区别

    2020-09-29 19:14:53
    因为其长度固定,char的存取速度还是要比varchar要快得多,方便程序的存储与查找;但是char也为此付出的是空间的代价,因为其长度固定,所以会占据多余的空间,可谓是以空间换取时间效率。varchar则刚好相反,以时间...
  • 首先,VARCHAR和CHAR是两种最主要的字符串类型。在设计用于存储字符串的表字段时,可能会对到底选哪个类型有所犹豫,确实如果不了解它们之间的区别,选择上是不会那么容易,本篇将详细介绍它们之间的区别以及如何...
  • varchar char 的区别

    2020-12-07 19:50:53
    区别一:定长和变长 char是不可以发生改变的字符 varchar 是可以发该变的字符 ...超出的部分和char一样,舍去即可。 区别二:存储容量不同 对于char类型来说,最多只能存放的字符个数为255,和编码无关。 var.
  • 由于mysql一直是我的弱项(其实各方面我都是很弱的),所以最近在看msyql,正好看到varchar和char区别,所以整理一下,便于以后遗忘。    0.0图片已经说明一切,但是系统说我字数不够,我真能在说两句,首先,...
  • mysql 5.7中varchar char的理解

    千次阅读 2016-10-11 11:23:07
    做数据库设计,偶然间研究了一下varchar 和char 这两个东东 对于我这种渣渣连二进制字节都不懂的人理解起来还挺费劲,不过功夫不负有心人 理论上的知识从网上看的翻看了好多文章有的文章真是误人子弟,先说一下核心...
  • 1、MySQL中varchar和char的区别 ① 定长和变长 char表示定长,规定多少字长则存储多少字长,超过的长度只能截取对应的长度进行存储,子长不够空格补齐; varchar表示在规定字长之内,有多少存多少,无需补齐;...
  • MYSQL varchar和char

    2018-09-21 13:32:35
    varchar存储规则  4.0版本以下,varchar(20),指的是20字节,如果存放UTF8汉字时,只能存6个(每个汉字3字节)  5.0版本以上,varchar(20),指的是20字符,无论存放的是数字、字母还是UTF8汉字(每个汉字3字节,...
  • Varchar和Char的区别 Char是定长的,定长的是字符,而不是字节; Varchar是一个边长的。 在数据存储的时候,Char是不够长的时候空格补齐,而Varchar则根据实际字符串存储;查询显示的时候,Char补齐的空格被去掉...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 6,866
精华内容 2,746
关键字:

varchar和char