精华内容
下载资源
问答
  • 2019-07-23 15:54:04

    具体要看版本:

    4.0版本以下,varchar(100),指的是100字节,如果存放UTF8汉字时,只能存33个(每个汉字3字节)

    5.0版本以上,varchar(100),指的是100字符,无论存放的是数字、字母还是UTF8汉字(每个汉字3字节),都可以存放100个

    更多相关内容
  • mysql中varchar与char的区别以及varchar(30)中的30代表的涵义(1)varchar与char的区别varchar存储可变长字符串,小于255字节时需要1个额外字节(大于255需要2个额外字节)存储长度,最大长度为65532字节(所有列总和);...

    mysql中varchar与char的区别以及varchar(30)中的30代表的涵义

    (1)varchar与char的区别

    varchar存储可变长字符串,小于255字节时需要1个额外字节(大于255需要2个额外字节)存储长度,最大长度为65532字节(所有列总和);

    char存储定长(right padding),读取时会截断末尾空格,长度最大为255字符;

    char 与varchar都是用来存储字符串的,只是他们的保存方式不一样,char有固定的长度,而varchar属于可变长的字符类型。

    char是一种固定长度的类型,varchar则是一种可变长度的类型。

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

    建议:

    myisam存储引擎建议使用固定长度,数据列代替可变长度的数据列。

    memory存储引擎目前都使用固定数据行存储,因此无论使用char,varchar列都没有关系。

    Innodb存储引擎建议使用varchar类型。

    在MySQL中用来判断是否需要进行对数据列类型转换的规则:

    1. 在一个数据表里,如果每一个数据列的长度都是固定的,那么每一个数据行的长度也将是固定的。

    2. 只要数据表里有一个数据列的长度是可变的,那么各数据行的长度都是可变的。

    3. 如果某个数据表里的数据行的长度是可变的,那么为了节约存储空间,MySQL会把这个数据表里的固定长度类型的数据列转换为相应的可变长度类型。

    对于MyISAM表,尽量使用char,对于那些经常需要修改而容易形成碎片的myisam和isam数据表就更是如此,它的缺点就是占用磁盘空间;

    对于InnoDB表,因为它的数据行内部存储格式对固定长度的数据行和可变长度的数据行不加区分(所有数据行共用一个表头部分,这个表头部分存放着指向各个有关数据列的指针),所以使用char类型不见得会比使用varchar类型好。事实上,因为char类型通常要比varchar类型占用更多的空间,所以从减少空间占用量和减少磁盘i/o的角度,使用varchar类型反而更有利。

    (2)varchar(30)中30的涵义

    最大存储30个字符;varchar(5)和(200)存储hello所占空间一样,但后者在排序时会消耗更多内存,因为order by col采用fixed_length计算col长度(memory)引擎一样。

    For example, a varchar(255) column can hold a string with a maximum length of 255 characters(字符而非字节),对于latin1,‘abcd’的L为4,存储需要5个字节;对于ucs2(双字节字符),则需要10个字节存储(最大长度为510>255,故需要额外2个字节)

    (3)int(20)中20的涵义

    20表示最大显示宽度为20,但仍占4个字节存储,存储范围不变;

    create table int_test(a int zerofill NOT NULL auto_increment, PRIMARY KEY (a));

    create table int_test_4(a int(4) zerofill NOT NULL auto_increment, PRIMARY KEY (a));

    select * from int_test;

    +------------+

    | a          |

    +------------+

    | 0000000001 |

    | 0000000002 |

    | 0000000003 |

    | 2147483648 |

    +------------+

    select * from int_test_4;

    +------------+

    | a          |

    +------------+

    |       0001 |

    |       0002 |

    |       0003 |

    | 2147483648 |

    +------------+

    (4)为什么MySQL这样设计?

    对大多数应用没有意义,只是规定一些工具用来显示字符的个数;int(1)和int(20)存储和结算均一样。

    展开全文
  • 说一下情况:MySQL字段有个varchar值字段设置的太短了,设置了30个,(我依稀记得varchar是可扩展的,当然现实并不容忍我的依稀),所以我只能找一个方法在保证数据库数据不变的情况下,动态修改varchar字段的长度,...
  • 1、varchar(100)和varchar(10)的区别在哪里? 2、varchar能存多少汉字、数字? 3、varchar的最大长度是多少呢? 4、字符、字节、位,之间的关系? 5、mysql字段类型存储需要多少字节? 接下来请仔细看,整理...

    看完这篇文章,你能搞清楚以下问题:

    1、varchar(100)和varchar(10)的区别在哪里?

    2、varchar能存多少汉字、数字?

    3、varchar的最大长度是多少呢?

    4、字符、字节、位,之间的关系?

    5、mysql字段类型存储需要多少字节?

    接下来请仔细看,整理不易啊。

    1、varchar(100)和varchar(10)的区别在哪里?

    一般初学会认为,二者占用的空间是一样的。比如说我存储5个char,二者都是实际占用了5个char了【不准确的想法:varchar在实际存储的时候会多一个byte用来存放长度】。
    但是深入一下,设计数据库的时候,二者一样吗?
    答案是否定的【至少varchar类型需要在数据之前利用一个或者两个字节来存储数据的长度】并且二者在内存中的操作方式也是不同的,下面的例子中有体现(例子链接:看下面的例子。 )
    如现在用户需要存储一个地址信息。根据评估,只要使用100个字符就可以了。但是有些数据库管理员会认为,反正Varchar数据类型是根据实际的需要来分配长度的。还不如给其大一点的呢。为此他们可能会为这个字段一次性分配200个字符的存储空间。这VARCHAR(100)与VARCHAR(200)真的相同吗?

    结果是否定的。虽然他们用来存储90个字符的数据,其存储空间相同。但是对于内存的消耗是不同的。对于VARCHAR数据类型来说,硬盘上的存储空间虽然都是根据实际字符长度来分配存储空间的,但是对于内存来说,则不是。其时使用固定大小的内存块来保存值。简单的说,就是使用字符类型中定义的长度,即200个字符空间。显然,这对于排序或者临时表(这些内容都需要通过内存来实现)作业会产生比较大的不利影响。解释可以参见这里。如果不想看解释,我这里大概说下:假设VARCHAR(100)与VARCHAR(200)类型,实际存90个字符,它不会对存储端产生影响(就是实际占用硬盘是一样的)。但是,它确实会对查询产生影响,因为当MySql创建临时表(SORT,ORDER等)时,VARCHAR会转换为CHAR,转换后的CHAR的长度就是varchar的长度,在内存中的空间就变大了,在排序、统计时候需要扫描的就越多,时间就越久。

    所以如果某些字段会涉及到文件排序或者基于磁盘的临时表时,分配VARCHAR数据类型时仍然不能够太过于慷慨。还是要评估实际需要的长度,然后选择一个最长的字段来设置字符长度。如果为了考虑冗余,可以留10%左右的字符长度。千万不能认为其为根据实际长度来分配存储空间,而随意的分配长度,或者说干脆使用最大的字符长度。
    ----------------------------------char------------------------------------------
    1、从碎片角度进行考虑,使用CHAR字符型时,由于存储空间都是一次性分配的。为此某个字段的内容,其都是存储在一起的。单从这个角度来讲,其不存在碎片的困扰。而可变长度的字符数据类型,其存储的长度是可变的。当其更改前后数据长度不一致时,就不可避免的会出现碎片的问题。故使用可变长度的字符型数据时,数据库管理员要时不时的对碎片进行整理。如执行数据库导出导入作业,来消除碎片。
    2、考虑其长度的是否相近,如果某个字段其长度虽然比较长,但是其长度总是近似的,如一般在90个到100个字符之间,甚至是相同的长度。此时比较适合采用CHAR字符类型。比较典型的应用就是MD5哈希值。当利用MD5哈希值来存储用户密码时,就非常使用采用CHAR字符类型。因为其长度是相同的。另外,像用来存储用户的身份证号码等等,一般也建议使用CHAR类型的数据。
    另外请大家考虑一个问题,CHAR(1)与VARCHAR(1)两这个定义,会有什么区别呢?虽然这两个都只能够用来保存单个的字符,但是VARCHAR要比CHAR多占用一个存储位置。这主要是因为使用VARCHAR数据类型时,会多用1个字节用来存储长度信息。这个管理上的开销char字符类型是没有的。

    ---------------------------------总结---------------------------------------------

    二者在磁盘上存储占的空间是一样的。区别有二。第一、一个变长一个固定长度。第二、在内存中的操作方式,varchar也是按照最长的方式在内存中进行操作的。比如说要进行排序的时候,varcahr(100)是按照100这个长度来进行的。

    2、varchar能存多少汉字、数字?

    具体还是要看版本的,一个字符占用3个字节   ,一个汉字(包括数字)占用3个字节=一个字符

    4.0版本以下,varchar(100),指的是100字节,如果存放UTF8汉字时,只能存33个(每个汉字3字节)

    5.0版本以上,varchar(100),指的是100字符,无论存放的是数字、字母还是UTF8汉字(每个汉字3字节),都可以存放100个。

    UTF8编码中一个汉字(包括数字)占用3个字节

    GBK编码中一个汉字(包括数字)占用2个字节

    3、varchar的最大长度是多少呢?

    mysql的vachar字段的类型虽然最大长度是65535,但是并不是能存这么多数据,最大可以到65533,其中需要1到2个字节来存储数据长度(如果列声明的长度超过255,则使用两个字节来存储长度,否则1个)字节,当不允许非空字段的时候(因为要用一个字节来存储不可为空的标识),当允许非空字段的时候只能到65532(省下了存储非空的那个字节)。

    行中可以用的字节数如下计算:(参考文档:https://www.jianshu.com/p/ee1e4b14c5e7 )

    字段非空时候:varchar(65535) -2 bytes (存储长度,按2个算) - 1byte (latin1类型) - 1 (null byte)=65531 字节可以用

    减1的原因是实际行存储从第二个字节开始';

    字段可以空时候:varchar(65535) -2 bytes (存储长度,按2个算) - 1byte (latin1类型) =65532 字节可以用

    根据这个最大字节数,以及编码方式,可以计算能存储的汉字数。

    4、字符、字节、位,之间的关系?

    1、位:
    数据存储的最小单位。每个二进制数字0或者1就是1个位;
    2、字节:
    8个位构成一个字节;

    即:1 byte (字节)= 8 bit(位);

    1 KB = 1024 B(字节);
    1 MB = 1024 KB;   (2^10 B)
    1 GB = 1024 MB;  (2^20 B)
    1 TB = 1024 GB;   (2^30 B)

    3、字符:

    a、A、中、+、*、の......均表示一个字符;
    一般 utf-8 编码下,一个汉字 字符 占用 3 个 字节;数字属于汉字,和汉字占用一样字节。
    一般 gbk 编码下,一个汉字  字符  占用 2 个 字节;

    5、mysql字段类型存储需要多少字节?

    数字类型

    列类型需要的存储量
    TINYINT1 字节
    SMALLINT2 个字节
    MEDIUMINT3 个字节
    INT4 个字节
    INTEGER4 个字节
    BIGINT8 个字节
    FLOAT(X)4 如果 X < = 24 或 8 如果 25 < = X < = 53
    FLOAT4 个字节
    DOUBLE8 个字节
    DOUBLE PRECISION8 个字节
    REAL8 个字节
    DECIMAL(M,D)M字节(D+2 , 如果M < D)
    NUMERIC(M,D)M字节(D+2 , 如果M < D)

     日期和时间类型

    列类型需要的存储量
    DATE3 个字节
    DATETIME8 个字节
    TIMESTAMP4 个字节
    TIME3 个字节
    YEAR1 字节

     串类型

    列类型需要的存储量
    CHAR(M)M字节,1 <= M <= 255
    VARCHAR(M)L+1 字节, 在此L <= M1 <= M <= 255
    TINYBLOBTINYTEXTL+1 字节, 在此L< 2 ^ 8
    BLOBTEXTL+2 字节, 在此L< 2 ^ 16
    MEDIUMBLOBMEDIUMTEXTL+3 字节, 在此L< 2 ^ 24
    LONGBLOBLONGTEXTL+4 字节, 在此L< 2 ^ 32
    ENUM('value1','value2',...)1 或 2 个字节, 取决于枚举值的数目(最大值65535)
    SET('value1','value2',...)1,2,3,4或8个字节, 取决于集合成员的数量(最多64个成员)

    text与blob的区别在于:text不能存储图片。blob是二进制流,text是非二进制。

    mysql 的二进制数据类型 BINARY, VARBINARY, BLOB 都没有字符集的概念。

    梅花香自古寒来

    展开全文
  • varchar(n)中的数字在5.0以下的版本表示字节,在5.0以上表示字符例子:varchar(100),在5.0以下表示存储100个字节,5.0以上表示存储100个字符;所以5.0以上的就不用说啦,你在定义类型的时候,用作标题还是小文本,...

    varchar(n)中的数字在5.0以下的版本表示字节,在5.0以上表示字符

    例子:varchar(100),在5.0以下表示存储100个字节,5.0以上表示存储100个字符;所以5.0以上的就不用说啦,你在定义类型的时候,用作标题还是小文本,期望不超过多少字,直接写入在夸号中就可以啦;

    那么5.0以下的版本怎么去计算字节填写的数字可以存储多少个汉字或者数字呢。

    一个汉字等于三个字节,这是换算规律,也就是说上面的varchar(100),表示只能存储最多33个汉字,你在做的时候,你期望需要存储100个以下的汉字,那么varchar中的值就是3*100;如果你期望存储一个标题,比如十几个字,不超过20个字,那么你可以用20*3,填写到varchar中,比如varchar(60),就可以啦,其实varchar可以存储多少个汉字,就是那么的简单。

    那么如果在存储数据的时候,存储数据过多了,超出了范围会怎么样呢,当然就是数据库报错了,这个是不用多说了呢。

    至于的mysql是什么版本,你可能也比较关注,怎么查看呢,其实就是你在使用命令行,连接数据库的时候,就会显示php的版本号。

    比如我的是5.5.53 版本号,那么使用varchar(100)就是可以最多存储100的意思。

    小朋友们可能还涉及到,varchar和char的区别,其实你只要知道char比较占内存,但是性能块,varchar不占内存,性能相对性会慢,当然是相对性,实际上对于你来说,你感觉不到他们的差异性。

    详细点说,varchar(100) 可以存储33个字,但是我只存储了10个字,那么varchar在内存中消耗的就是10个字,用多少占多少,如果是char的话,char(100) 你只存储了10个字,但是他会在内存中自动补齐,占了100个位置,所以char好内存,这个就是他们大致的区别,对于只要会运用数据库的你,已经足够了,至于你想深入研究数据库,那么本文可能对你不会产生太大的帮助。

    后置

    作者:赵锐庆; 希望亲们在未来美好的日子里,能多帮助一下正在处于苦难的其他人!

    展开全文
  • ![图片说明](https://img-ask.csdn.net/upload/201512/06/1449332151_379799.png)![![图片说明](https://img-ask.csdn.net/upload/201512/06/1449332128_268677.png)图片说明]... 新人上路,求各位大哥告之
  • 例如char(30) 和 varchar(30)表示都可以存30个字符。有一点要注意的是在utf8mb4编码中,每个字符占4个节点。在utf8中,每个字符占3个字节。当要存储的字符超过CHAR/VARCHAR指定的最大长度。在sql mode 没开启的时候...
  • mysql中varchar存放多少个中文

    千次阅读 2020-02-17 00:33:43
    4.0版本以下,varchar(50),指的是50字节,如果存放UTF8汉字时,只能存16个(每个汉字3字节) 5.0版本以上,varchar(50),指的是50字符,无论存放的是数字、字母还是UTF8汉字(每个汉字3字节),都可以存放50个 其实...
  • Mysql 的varchar能存几个字符?

    千次阅读 2020-11-30 17:48:50
    utf8编码的varchar  Mysql记录行数据是有限的。大小为64k,即65535个字节,而varchar要用1-2字节来存储字段长度,小于255的1字节,大于255的2字节。  Mysql 5.0后,英文字符固定都是一个字节,汉字字符根据编码方式...
  • 在设计数据库的时候会考虑给字段设置什么类型,设置多少长度合适,之前一直认为varchar(2)可以存储一个汉字,或者一个数字,通过今天无意间的查询,发现了这个错误,来记下来 其实varchar类型可以存储多少个汉字...
  • 答案:CHAR是一种固定长度的类型,VARCHAR则是一种可变长度的类型。 CHAR列的长度固定为创建表时声明的长度。长度可以为从0到255的任何值。当保存CHAR值时,在它们的右边填充空格以达到指定的长度。当检索到CHAR值时...
  • char、varcharvarchar2区别

    千次阅读 2021-01-28 04:07:12
    char varchar varchar2 的区别 区别: 1.CHAR的长度是固定的,而VARCHAR2的长度是可以变化的, 比如,存储字符串“abc,对于CHAR (20),表示你存储的字符将占20个字节(包括17个空字符),而同样的VARCHAR2 (20)则只...
  • 这是一个sql文件,在查询分析器里打开运行,先创建二个临时表Temp1 、Temp2, temp1是int型主键,temp2是varchar(30)型主键,然后各插入十万条数据,比较插入的速度和 select的速度。
  • oracle中varchar类型的最大长度

    千次阅读 2016-01-02 18:00:19
    关于Oracle Database中的字段的VARCHAR2类型的最大长度为4000,我们再来看看PL/SQL中VARCHAR2变量类型,如下官方文档所示,它的最大字节长度为32767,所能容纳的字符个数取决于字符集。
  • Mysql varchar长度问题

    千次阅读 2021-01-19 07:16:20
    如果某一项中设置的是varchar(50)那么对英文当然是50那么对中文呢utf-8的中文占3个字节那么,这个varchar(50)是不是只能存16个汉字了?不是这样的,mysql低版本之前是这样的,但是5.0以后就不是了mysql varchar(50) ...
  • 1.varchar(N)的逻辑意义从MySQL4.1开始,varchar (N)中的N指的是该字段最多能存储多少个字符(characters),不是字节数。不管是一个中英文字符或者数字、或者一个汉字,都当做一个字符。在4.1之前,N表示的是最大存储...
  • Mysql的varchar(20)到底可以存储多少个中文字符

    万次阅读 多人点赞 2014-07-22 20:23:52
    今天群里问说“Mysql的varchar(20)到底可以存储多少个中文字符”,很多直观回答是10个字符。这个问题其实很容易得到结果。博主就动手测试了一下。   动手测试之: 新建表: CREATE TABLE varchar_test ( `id`...
  • 【Mysql】varchar类型

    2021-01-18 19:34:19
    1.varchar类型(1)varchar (N):中的N指的是字符的长度,即:该字段最多能存储多少个字符(characters),不是字节数。不管是一个中英文字符或者数字、或者一个汉字,都当做一个字符。【 a,我,1 都是一个字符,但是a和...
  • 1、限制规则2、计算例子3、varchar物理存储4、InnoDB中的varchar5、MyISAM中的varchar一. varchar存储规则:4.0版本以下,varchar(20),指的是20字节,如果存放UTF8汉字时,只能存6个(每个汉字3字节)5....
  • Mysql varchar 字节长度

    千次阅读 2018-03-23 17:35:53
    1.我们经常 mysql创建 varchar(20) name这个 20长度 究竟是表示的字符数还是字节数?根编码字符集又有没有关系?首先 mysql 5.X 以上的版本的 定义中 表示的字符长度,如上varchar(20)你既可以添加20个英文字符,...
  • Mysql varchar大小长度问题

    千次阅读 2021-02-10 12:27:59
    1、限制规则字段的限制在字段定义的时候有以下规则:a) 存储限制varchar字段是将实际内容单独存储在聚簇索引之外,内容开头用1到2个字节表示实际长度(长度超过255时需要2个字节),因此最大长度不能超过65535。...
  • 总结:这个报错无非就是两个问题: 主从数据库的数据库不一致 或 数据表字段不一致
  • 最近有几个同学问我varchar和text有啥别吗,这个问题,以前说真的也没太多的整理,以前遇到text在设计中就是尽可能的拆到另一个表中,保持主表尽量的瘦小,可以让innodb bp缓存更多的数据。今天借次机会系统整理一下...
  • SQL varchar数据类型深入探讨

    千次阅读 2020-07-26 08:33:42
    In this article we’ll review the SQL varchar data type including a basic definition and overview, differences from varchar(n), UTF-8 support, Collation, performance considerations and more. ...
  • Mysql中char和varchar的区别

    千次阅读 多人点赞 2019-07-27 12:29:54
    文章目录前言问题起因length 和 char_length测试环境测试过程char和varchar区别总结 前言 这个标题起的过于俗套,前一段时间我还写了一篇总结《Mysql5.7版本中数据表字段可用的类型》来批判这种对比,原因是对比时...
  • MySQL中CHAR和VARCHAR类型演变和详解

    千次阅读 2021-01-19 04:37:04
    一、演变:MySQL数据库的varchar类型在5.0.3以下的版本中的最大长度限制为255,其数据范围可以是0~255。在MySQL5.0.3及以上的版本中,varchar数据类型的长度支持到了65535,也就是说可以存放65532个字节的数据,起始...
  • MySQL数据库varchar的限制规则说明

    千次阅读 2021-01-19 17:47:33
    MySQL数据库中varchar最大长度是多少?其实这不是一个固定的数字,varchar的长度是有限制规则的。本文我们就来介绍一下MySQL数据库中varchar的限制规则,并以一个实际的例子对限制规则进行了说明,接下来就让我们一...
  • 在MySQL5.0及之后 字符 数字 汉字都是50个 MySQL4.0及之前 3个字节代表一个汉字

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 244,449
精华内容 97,779
关键字:

varchar(30)