精华内容
下载资源
问答
  • 1、varchar(N)的逻辑意义从MySQL4.1开始,varchar (N)中的N指的是该字段最多能存储多少个字符(characters),不是字节数。...2、varchar(N)到底能存多长的数据在mysql reference manual上,varchar最多能存储65535个...

    1、varchar(N)的逻辑意义从MySQL4.1开始,varchar (N)中的N指的是该字段最多能存储多少个字符(characters),不是字节数。

    不管是一个中英文字符或者数字、或者一个汉字,都当做一个字符。在4.1之前,N表示的是最大存储的字节数(bytes)。

    2、varchar(N)到底能存多长的数据

    在mysql reference manual上,varchar最多能存储65535个字节的数据。varchar 的最大长度受限于最大行长度(max row size,65535bytes)。65535并不是一个很精确的上限,可以继续缩小这个上限。65535个字节包括所有字段的长度,变长字段的长度标识(每个变长字段额外使用1或者2个字节记录实际数据长度)、NULL标识位的累计。

    NULL标识位,如果varchar字段定义中带有default null允许列空,则需要需要1bit来标识,每8个bits的标识组成一个字段。一张表中存在N个varchar字段,那么需要(N+7)/8 (取整)bytes存储所有的NULL标识位。

    如果数据表只有一个varchar字段且该字段DEFAULT NULL,那么该varchar字段的最大长度为65532个字节,即65535-2-1=65532 bytes。

    复制代码 代码如下:

    CREATE TABLE `vchar1` (   `name` VARCHAR(65533)  NOT  NULL ) ENGINE=InnoDB DEFAULT CHARSET=latin1;

    CREATE TABLE `vchar2` (   `name` VARCHAR(65533)  NOT  NULL ) ENGINE=MyISAM DEFAULT CHARSET=latin1;

    如果数据表只有一个varchar字段且该字段NOT NULL,那么该varchar字段的最大长度为65533个字节,即65535-2=65533bytes。

    复制代码 代码如下:

    CREATE TABLE `vchar3` (   `name` VARCHAR(65532)  DEFAULT  NULL ) ENGINE=InnoDB DEFAULT CHARSET=latin1;

    CREATE TABLE `vchar4` (   `name` VARCHAR(65532)  DEFAULT  NULL ) ENGINE=MyISAM DEFAULT CHARSET=latin1;

    来个略微复杂点的表结构,->

    复制代码 代码如下:

    CREATE TABLE `tv` (

    `a` VARCHAR(100) DEFAULT NULL,

    `b` VARCHAR(100) DEFAULT NULL,

    `c` VARCHAR(100) DEFAULT NULL,

    `d` VARCHAR(100) DEFAULT NULL,

    `e` VARCHAR(100) DEFAULT NULL,

    `f` VARCHAR(100) DEFAULT NULL,

    `g` VARCHAR(100) DEFAULT NULL,

    `h` VARCHAR(100) DEFAULT NULL,

    `i` VARCHAR(N) DEFAULT NULL

    ) ENGINE=InnoDB DEFAULT CHARSET=latin1

    `i` varchar(N) DEFAULT NULL中N最大值可以为多少?

    这样计算:已知确定的字段长度为100*8  bytes,8个varchar(100)字段总共需要变长字段表示字节为1*8=8 bytes。每个NULL字段用1bit标识,9个字段都是default null,那么需要用(9+7)/8bit = 2 bytes存储NULL标识位。65535-100*8-1*8-2 = 64725 > 256, 那么字段i的最大长度为64725  - 2 =64723 bytes,即N=64723 。

    varchar到底能存多少个字符?这与使用的字符集相关,latin1、gbk、utf8编码存放一个字符分别需要占1、2、3个字节。

    3、varchar物理存储

    在物理存储上,varchar使用1到2个额外的字节表示实际存储的字符串长度(bytes)。如果列的最大长度小于256个字节,用一个字节表示(标识)。如果最大长度大于等于256,使用两个字节。

    当选择的字符集为latin1,一个字符占用一个byte

    varchar(255)存储一个字符,一共使用2个bytes物理空间存储数据实际数据长度和数据值。

    varchar(256)存储一个字符,使用2 bytes表示实际数据长度,一共需要3 bytes物理存储空间。

    varchar对于不同的RDBMS引擎,有不通的物理存储方式,虽然有统一的逻辑意义。对于mysql的不同存储引擎,其实现方法与数据的物理存放方式也不同。

    4、InnoDB中的varchar

    InnoDB中varchar的物理存储方式与InnoDB使用的innodb_file_format有关。早期的innodb_file_forma使用的Antelope文件格式,支持redundant和compact两种row_format。从5.5开始或者InnoDB1.1,可以使用一种新的file format,Barracuda。Barracuda兼容Redundant,另外还支持dynamic和compressed两种row_format.

    当innodb_file_format=Antelope,ROW_FORMAT=REDUNDANT 或者COMPACT。

    innodb的聚集索引(cluster index)仅仅存储varchar、text、blob字段的前768个字节,多余的字节存储在一个独立的overflow page中,这个列也被称作off-page。768个字节前缀后面紧跟着20字节指针,指向overflow pages的位置。

    另外,在innodb_file_format=Antelope情况下,InnoDB中最多能存储10个大字段(需要使用off-page存储)。innodbd的默认page size为16KB,InnoDB单行的长度不能超过16k/2=8k个字节,(768+20)*10 < 8k。

    当innodb_file_format=Barracuda, ROW_FORMAT=DYNAMIC 或者 COMPRESSED

    innodb中所有的varchar、text、blob字段数据是否完全off-page存储,根据该字段的长度和整行的总长度而定。对off-page存储的列,cluster index中仅仅存储20字节的指针,指向实际的overflow page存储位置。如果单行的长度太大而不能完全适配cluster index page,innodb将会选择最长的列作为off-page存储,直到行的长度能够适配cluster index page。

    5、MyISAM中的varchar

    对于MyISAM引擎,varchar字段所有数据存储在数据行内(in-line)。myisam表的row_format也影响到varchar的物理存储行为。

    MyISAM的row_format可以通过create或者alter sql语句设为fixed和dynamic。另外可以通过myisampack生成row_format=compresse的存储格式。

    当myisam表中不存在text或者blob类型的字段,那么可以把row_format设置为fixed(也可以为dynamic),否则只能为dynamic。

    当表中存在varchar字段的时候,row_format可以设定为fixed或者dynamic。使用row_format=fixed存储varchar字段数据,浪费存储空间,varchar此时会定长存储。row_format为fixed和dynamic,varchar的物理实现方式也不同(可以查看源代码文件field.h和field.cc),因而myisam的row_format在fixed和dynamic之间发生转换的时候,varchar字段的物理存储方式也将会发生变化。

    本文标题: MySQL数据类型varchar详解

    本文地址: http://www.cppcns.com/shujuku/mysql/106605.html

    展开全文
  • MySQL数据库中varchar数据类型有哪些特点发布时间:2020-11-12 11:34:50来源:亿速云阅读:99作者:小新这篇文章主要介绍MySQL数据库中varchar数据类型有哪些特点,文中介绍的非常详细,具有一定的参考价值,感兴趣...

    MySQL数据库中varchar数据类型有哪些特点

    发布时间:2020-11-12 11:34:50

    来源:亿速云

    阅读:99

    作者:小新

    这篇文章主要介绍MySQL数据库中varchar数据类型有哪些特点,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!

    VARCHAR(M)是一种比CHAR更加灵活的数据类型,同样用于表示字符数据,但是VARCHAR可以保存可变长度的字符串。其中M代表该数据类型所允许保存的字符串的最大长度,只要长度小于该最大值的字符串都可以被保存在该数据类型中。

    因此,对于那些难以估计确切长度的数据对象来说,使用VARCHAR数据类型更加明智。

    MySQL4.1以前,VARCHAR数据类型所支持的最大长度255,5.0以上版本支持65535字节长度,utf8编码下最多支持21843个字符(不为空)。

    varchar特点

    1、使用比固定长度类型(char)占用更少存储空间(除了使用ROW_FORMAT=FIXED创建的MyISAM表)。

    2、使用额外的1-2字节来存储值长度,列长度<=255使用1字节保存,其它情况使用2字节保存。例如varchar(10)会占用11字节存储空间,varchar(500)会占用502字节存储空间。

    3、节约空间,所以性能会有帮助。在更新的时候会产生额外的工作。

    4、5.0以上版本,取值或设置值都会保存字符串末尾的空格,4.1之前的版本都会把字符串末尾的空格删除掉。

    5、最大长度远大于平均长度,很少发生更新的时候适合使用varchar,因为碎片更少了。

    VARCHAR型字段的另一个突出的好处是它可以比CHAR型字段占用更少的内存和硬盘空间。当数据库很大时,这种内存和磁盘空间的节省会变得非常重要.

    虽然VARCHAR使用起来较为灵活,但是从整个系统的性能角度来说,CHAR数据类型的处理速度更快,有时甚至可以超出VARCHAR处理速度的50%。因此,用户在设计数据库时应当综合考虑各方面的因素,以求达到最佳的平衡。

    以上是MySQL数据库中varchar数据类型有哪些特点的所有内容,感谢各位的阅读!希望分享的内容对大家有帮助,更多相关知识,欢迎关注亿速云行业资讯频道!

    展开全文
  • mysql中varchar什么类型

    千次阅读 2021-01-20 01:23:40
    mysql中varchar是可变长度的类型,在varchar类型数据列里,每个值只占用刚好够用的字节,再加上一个用来记录其长度的字节。如果字符串列最大长度比平均长度大很多的列,那么就可以使用varchar来储存。varchar类型...

    mysql中varchar是可变长度的类型,在varchar类型的数据列里,每个值只占用刚好够用的字节,再加上一个用来记录其长度的字节。如果字符串列最大长度比平均长度大很多的列,那么就可以使用varchar来储存。

    0dfe92cdb9939a1973acd12bcd4f3eae.png

    varchar类型

    (推荐教程:mysql教程)

    varchar是可变长度的类型:在varchar(M)类型的数据列里,每个值只占用刚好够用的字节,再加上一个用来记录其长度的字节(即总长度为L+1字节)。

    mysql在查询时对于varchar字段在内存中是采用固定宽度而不是储存时的变长宽度,尤其是查询时创建的隐形临时表。所以在选择字段属性时还是适可而止,根据自己的业务来选择最合适的并且最小的长度,从而来提高查询速度,减少数据库服务器的开销。

    何时选用varchar列来储存?

    1、字符串列最大长度比平均长度大很多的列 ,充分发挥变长的特点;

    2、字符串列较少被更新的列;

    因为innodb引擎一个存储页为16k,频繁的更新变长字段可能导致存储页的分裂,产生存储碎片。

    3、多字节字符集,如utf-8;

    展开全文
  • mysql中char和varchar数据类型的区别是:varchar类型用于存储可变长的字符串,char类型用于存储定长的字符串。varchar适用于字符串列的最大长度比平均长度大的情况,char适用于列的长度为定值的情况。(推荐教程:...

    mysql中char和varchar数据类型的区别是:varchar类型用于存储可变长的字符串,char类型用于存储定长的字符串。varchar适用于字符串列的最大长度比平均长度大的情况,char适用于列的长度为定值的情况。

    d9c97f534e457d297bab70a9e6d7ed13.png

    (推荐教程:mysql教程)

    mysql中char和varchar数据类型的区别是:

    varchar类型用于存储可变长的字符串,是比较常见常用的字符串数据类型。

    在存储的字符串是变长时,varchar更加节约空间。由于varchar是变长的,在使用update的时候,可能使得行变得比原来更长,这就导致需要做额外的工作。

    如果一个行占用的空间增加,并且在页内没有多余的空间可与存储,这是innoDB的存储引擎需要分裂页来使行可以放进页内。

    char类型用于存储定长的字符串。

    在存储数据时,MySQL会删除所有文末的空格,所以,即便你存储的是:'abc ',注意这个字符串末尾是有空格的,也会在存储时把这个空格删掉。

    我们来看一下使用场景:

    varchar适用的场景:字符串列的最大长度比平均长度要大很多;

    字符串列的更新很少时,因为没有或很少有内存碎片问题;

    使用了UTF-8这样复杂的字符集,每个字符都使用不同的字节数进行存储;

    char适用的场景:列的长度为定值时适合适用,比如:MD5密文数据。

    展开全文
  • 《Mysql实例MySQL数据类型varchar详解》要点:本文介绍了Mysql实例MySQL数据类型varchar详解,希望对您有用。如果有疑问,可以联系我们。1、varchar(N)的逻辑意义从MySQL4.1开始,varchar (N)中的N指的是该字段最多能...
  • mysql varchar类型求和实例操作有的小伙伴在学习数据库的时候,创建表结构的时候不小心把某字段设置成了varchar但是在统计求和的时候就傻眼了,接下来跟着小编学习一下,不用改该列数据类型也能求和的方法吧!...
  • nvarchar类型数据的获取注意事项当在页面后台获取数据库表中某字段的数据时,需注意该数据的类型.防止因实际数据的字符长度因达不到指定数据类型规定的字符长度而导致空格的占位符. 比如: MSSQL中某一表的结构如下: ...
  • char 定长 最多255字符 末尾的空格会被默认删除 ...varchar类型与char类型不同 为变长字符串 在字符长度不超过255时 使用一个字节存储长度 超过255时用两个字节存储长度 每行的varchar总和不得超过65535字节 ...
  • 1.varchar类型的变化MySQL 数据库的varchar类型在4.1以下的版本中的最大长度限制为255,其数据范围可以是0~255或1~255(根据不同版本数据库来定)。在 MySQL5.0以上的版本中,varchar数据类型的长度支持到了65535,也...
  • 我第二句话的原因问题“因为它可以保存任何数据类型就像一根绳子。“是为了提出问题从它的角度看更具体所以人们真...目前的问题如下…我有一个varchar数据类型的字段。默认为空。它将包含空值或字符串(图像的文件名...
  • 展开全部可以用cast来转换。如:列e69da5e6ba9062616964757a686964616f31333433626465名叫grade,表名为A select cast(grade as numeric(y,x)) from A 其中y代表数据...使用CAST函数进行数据类型转换时,在下列情...
  • oracle中,如果一个列的类型varchar2,那么它不能直接转换为clob类型。可以通过间接的方式来修改。下面为实验:Oracle中,如果一个列的类型varchar2,那么它不能直接转换为clob类型。可以通过间接的方式来修改。...
  • 开发时偶尔碰到如下情况,导致这种情况的原因是两个表中的字段一个是int自增类型...mysql在进行数据查询时将varchar类型强转为int,且在做转换时遇到非数据情况就停止。所以才会出现如下查询情况。 解决方法: ...
  • 应该是varchar里面的时间范围超出了datetime类型的范围,建议使用baidatetime2,。 背景知识: SQL Server 2008除了DateTime和SmallDateTime之外,又新增了四种时间类型,分别为:date,time,datetime2和...
  • 【Mysql】varchar类型

    2021-01-18 19:34:19
    1.varchar类型(1)varchar (N):中的N指的是字符的长度,即:该字段最多能存储多少个字符(characters),不是字节数。不管是一个中英文字符或者数字、或者一个汉字,都当做一个字符。【 a,我,1 都是一个字符,但是a和...
  • 这是oracle数据库独有的数据类型2.varcharvarchar2的区别①②③④ 1.这是oracle数据库独有的数据类型 2.varcharvarchar2的区别 ① varchar ——存放定长的字符数据,最长2000個字符; varchar2 ——存放变长字符...
  • The screenshot show 3 typical definitions of data type: id (autoincrement), a title and a number.1.- Which are differences between: none and ...2.- Do I must choose as defined: '' for varchar types ...
  • nvarchar类型和varchar类型

    千次阅读 2021-02-07 10:44:26
    文章目录nvarchar类型和varchar类型写在前面一、nvarchar是什么?2.读入数据总结 写在前面 笔者今天在阅读一份数据库设计时观察到表中大量使用了nvarchar这一类型,发现自己对此了解的太少,比如它是什么类型,和...
  • ORA-22858: 数据类型的变更无效 varchar2类型转换为clob类型Oracle中,如果一个列的类型varchar2,那么它不能直接转换为clob类型。可以通过间接的方式来修改。下面为实验:ORA-22858: 数据类型的变更无效如果直接...
  • bug记录,写sql的时候用到了convert将varchar转换为datetime类型,使用convert(datetime,字段),最后报错“从varchar数据类型到datetime数据类型的转换产生一个超出该范围的值” 经排查,where后面的条件查询出来并...
  • 自己的一个例子,在存储一个email的需求中.mysql定义的字段,类型:varchar 长度:20当我插入一个email:...以下为转发:今天新开始的项目在做数据库设计,发现自己对MySql的varchar类型还不熟悉,故又上网收集资...
  • I have a MySQL table with a VARCHAR(25) column that I want to convert to INT. All of the data in the column is either integer or blanks. I have tried this command:ALTER TABLE ip MODIFY isp INT UNSIG.....
  • 插入时在数据加上’'号即可解决,譬如 INSERT IGNORE INTO 表名 VALUES ('数字字符串1','数字字符串2') 这样数字字符串1和2插入时字符串前面的0就不会被省略掉了
  • MySql中的varchar类型

    2021-01-18 18:40:30
    1.varchar类型的变化MySQL 数据库的varchar类型在4.1以下的版本中的最大长度限制为255,其数据范围可以是0~255或1~255(根据不同版本数据库来定)。在 MySQL5.0以上的版本中,varchar数据类型的长度支持到了65535,也...
  • mysql - varchar类型与数字的比较和转换convert(对象, 目标类型)是mysql中常用的类型转换对象函数。eg: select convert(‘1.123’, decimal(10.4)),结果就是1.1230。对象可以用列名替代。前两天发现,一个小伙伴...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 360,695
精华内容 144,278
关键字:

varchar类型是什么型数据