mysql varchar(20) varchar(200) 在存放字符数为10位的数据的时候 有什么区别?
ps: 今天遇到的一个面试题
很费解 
请大家知晓一二

解决方案 »

  1.   


    没区别 varchar里面的数字只表示最大的字符数
      

  2.   


    我也是如是说的  可是面试官说有区别 肯定是有区别的 
    大概解释的意思是:select 在读数据的时候 先读的是表结构的定义,定义的是20 和200 长度  在内存中分配的长度就是分别为20 和200 ……
      

  3.   

    只能说明面试你的人是个白痴 CHAR还是他说的那种区别
      

  4.   


    我也是如是说的  可是面试官说有区别 肯定是有区别的 
    大概解释的意思是:select 在读数据的时候 先读的是表结构的定义,定义的是20 和200 长度  在内存中分配的长度就是分别为20 和200 ……
    这个,还是跟具体实现相关的。按定长进行内存预分配。但也有可能是按变长进行动态分配,那就是一样的了。
      

  5.   

    如果建在这个列上,一个的key_length=200,一个是00,,200的索引文件肯定要大一些,搜索要慢一些,mysql在做搜索时,索引长度越短越快.
      

  6.   

    从存储而来说,就是没有区别,都是varchar,只要存放的内容一样,所占用的就是一样。其他层面上,那要看怎么问了。非要较真,20跟200就是区别,数字不一样
      

  7.   

    有人是这样说的:在磁盘上存储占的空间是一样的。在内存中varchar是按照最长的方式在内存中进行操作的。如进行排序的时候,varcahr(200)是按照200这个长度来进行的。
      

  8.   

    字符集相同的情况下,存储没有区别,如果在此基础上加index,那就要看index的长度是否一样
      

  9.   

    一个最大长度的区别,这个应该没什么好问的,如果他问 char(20) 和 varcha(20)有什么区别,还可以写点东西出来。
      

  10.   

    执行效率上,varchar(20)速度快点吧。
      

  11.   

    有区别,varchar20最多能容纳20个字符,而varchar200能最多容纳200个,所以你在放入10个字符的时候,varchar200所占的内存就相对多些
      

  12.   


    我也是如是说的  可是面试官说有区别 肯定是有区别的 
    大概解释的意思是:select 在读数据的时候 先读的是表结构的定义,定义的是20 和200 长度  在内存中分配的长度就是分别为20 和200 ……
    这个,还是跟具体实现相关的。按定长进行内存预分配。但也有可能是按变长进行动态分配,那就是一样的了。
    +1
      

  13.   

    当数据为char(20)类型时,不管插入的值的长度是多少所占用的存储空间都是20,而varchar(200)所对应的数据所占用为实际长度加1
      

  14.   

    你应该思考下:假设没区别,那么 varchar 都定义为最长就好了,省得以后放不下还要调整表结构
      

  15.   

    呵呵,估计我的答案是对的。针对目前的mysql版本(早期的不考虑了),vrachar(200)比 vrachar(20)在存储10字节数据时,每条记录会多占用1个字节。mysql varchar 实际存储占用N+1或者N+2字节,其中N是实际数据,
    1或者2是实际数据的长度,vrachar(20)是1,vrachar(200)是2。1字节能表示的最大长度是255,为什么vrachar(200)需要2字节长度标识。
    因为这里的200是字符,不是字节。vrachar(200)可以存200汉字或者数字或者字母,
    这样实际最大长度是600,所以定义vrachar(200)的话,会用2字节标识长度。