精华内容
下载资源
问答
  • 1、varchar(N)的逻辑意义从MySQL4.1开始,varchar (N)中的N指的是该字段最多能存储多少个字符(characters),不是字节数。...2varchar(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

    展开全文
  • 似乎Oracle曾一度计划为VARCHAR提供与...无论他们的计划是什么,从11.2.0.2开始,VARCHARVARCHAR2相同.这是the SQL Language Reference 11g Release 2所说的:Do not use the VARCHAR data type. Usethe VARCHAR2 da...

    似乎Oracle曾一度计划为VARCHAR提供与VARCHAR2不同的定义.它告诉客户这个并建议不要使用VARCHAR.无论他们的计划是什么,从11.2.0.2开始,VARCHAR与VARCHAR2相同.这是

    the SQL Language Reference 11g Release 2所说的:

    Do not use the VARCHAR data type. Use

    the VARCHAR2 data type instead.

    Although the VARCHAR data type is

    currently synonymous with VARCHAR2,

    the VARCHAR data type is scheduled to

    be redefined as a separate data type

    used for variable-length character

    strings compared with different

    comparison semantics.

    Currently, VARCHAR is synonymous with

    VARCHAR2. However, in future releases

    of PL/SQL, to accommodate emerging SQL

    standards, VARCHAR might become a

    separate datatype with different

    comparison semantics. It is a good

    idea to use VARCHAR2 rather than

    VARCHAR.

    The VARCHAR datatype is synonymous

    with the VARCHAR2 datatype. To avoid

    possible changes in behavior, always

    use the VARCHAR2 datatype to store

    variable-length character strings.

    Oracle 9.2和8.1.7文档说的基本相同,所以即使Oracle不断阻止使用VARCHAR,到目前为止他们还没有采取任何措施来改变它与VARCHAR2的奇偶校验.

    展开全文
  • 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数据库中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数据类型有哪些特点的所有内容,感谢各位的阅读!希望分享的内容对大家有帮助,更多相关知识,欢迎关注亿速云行业资讯频道!

    展开全文
  • oracle中,如果一个列的类型varchar2,那么它不能直接转换为clob类型。可以通过间接的方式来修改。下面为实验:Oracle中,如果一个列的类型varchar2,那么它不能直接转换为clob类型。可以通过间接的方式来修改。...
  • mysql中char和varchar数据类型的区别是:varchar类型用于存储可变长的字符串,char类型用于存储定长的字符串。varchar适用于字符串列的最大长度比平均长度大的情况,char适用于列的长度为定值的情况。(推荐教程:...
  • 这是oracle数据库独有的数据类型2.varcharvarchar2的区别①②③④ 1.这是oracle数据库独有的数据类型 2.varcharvarchar2的区别 ① varchar ——存放定长的字符数据,最长2000個字符; varchar2 ——存放变长字符...
  • 今天遇到一个协议字段类型varchar2类型数据不够大,需改为clob类型。 在Oracle中,如果一个列的类型varchar2,那么它不能直接转换为CLOB类型。需要清空字段的数据内容,然后把原来的字段删掉,重新建个字段类型为...
  • 原标题:Oracle 数据类型转换之 varchar2,number,date 大家好;大家都知道,Oracle SQL 在where子查询中,“=” 关系的两侧,数据类型要一致,才能查询数据;有时候,我们不小心, Varchar2 “=” Number; 虽然有...
  • Distinct删除重复数据时 自定义的方法比较【转】 最近项目中在用Linq Distinct想要将重复的资料去除时,发现它跟Any之类的方法有点不太一样,不能很直觉的在呼叫时直接带入重复数据判断的处理逻辑,所以当我们要用某个...
  • varchar2(2byte) 最多可以存储2个字节,varchar2(2 char) 最多可以存储2个字符。当数据库字符集分别:1.为 AL32UTF8 时,1个汉字是1个字符,1个汉字占3个字节,varchar2(2 byte) 一个汉字也不能存,varchar2(2 char)...
  • 1.新建一张表设置一个varchar2类型字段 2.测试汉字 可以看出一个中文字符占varchar2长度2个单位 3.测试字母和数字 可以看出数字和英文字母占varchar2长度的1个单位
  • ORA-22858: 数据类型的变更无效 varchar2类型转换为clob类型Oracle中,如果一个列的类型为varchar2,那么它不能直接转换为clob类型。可以通过间接的方式来修改。下面为实验:ORA-22858: 数据类型的变更无效如果直接...
  • 目前没有本质的区别但是:varchar2是oracle提供的独特的数据类型oracle保证在任何版本中该数据类型向上和向下兼容但不保证varchar,这是因为varchar是标准sql提供的数据类型有可能随着sql标准的变化而改变2: varchar...
  • 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 ...
  • 《Mysql实例MySQL数据类型varchar详解》要点:本文介绍了Mysql实例MySQL数据类型varchar详解,希望对您有用。如果有疑问,可以联系我们。1、varchar(N)的逻辑意义从MySQL4.1开始,varchar (N)中的N指的是该字段最多能...
  • 我第二句话的原因问题“因为它可以保存任何数据类型就像一根绳子。“是为了提出问题从它的角度看更具体所以人们真...目前的问题如下…我有一个varchar数据类型的字段。默认为空。它将包含空值或字符串(图像的文件名...
  • char、varcharvarchar2区别

    千次阅读 2021-01-28 04:07:12
    char varchar varchar2 的区别 区别: 1.CHAR的长度是固定的,而VARCHAR2的长度是可以变化的, 比如,存储字符串“abc,对于CHAR (20),表示你存储的字符将占20个字节(包括17个空字符),而同样的VARCHAR2 (20)则只...
  • 应该是varchar里面的时间范围超出了datetime类型的范围,建议使用baidatetime2,。 背景知识: ...数据类型 时间范围 精度 datetime 1753-01-01到9999-12-31 00:00:00 到 23:59:59.997 3.33毫秒 smalldatetime
  • 将raw类型数据转成varchar2的函数 create or replace function func_conversion(src_val in varchar2) return VARCHAR2 IS rtn_utf_val VARCHAR2(2000 CHAR); rtn_big5_val VARCHAR2(2000 CHAR); err_num NUMBER...
  • 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.....
  • 2,需求 我想将 adb 数据库的表 tableA 复制到数据库 bdb 中去,当我拷贝 adb 数据库的表 tableA 的【数据和结构】时出现问题中的这个提示,拷贝动作始终无法完成 但是我只复制 tableA 【结构】,动作可以完成 3,...
  • 一. varchar2(10)和number应该转换为什么类型?oracle转成mysql时:varchar2(10)可以转成varchar(10)number则要看oracle中存储的具体是什么类型的数据:...注:mysql中没有varchar2(10)和number这两个数据类型二. My...
  • 首先讲char——定长类型。如将姓名列指定为char(8)。当保存“张三”时,数据库还会自动保存4个空格;保存“张三丰”时,数据库还会自动保存2个空格,这样每个人的姓名长度都为8,长度是固定的,所以叫做“定长”。...
  • 2 短字符串 相对varchar可以节约一个储存长度的空间 3 频繁更新的字段 相对于varchar不会产生长度变化也就不会产生存储碎片 varchar varchar类型与char类型不同 为变长字符串 在字符长度不超过255时 使用一个...
  • 区别:1.CHAR de 长度为固定 de ,而VARCHAR2 de 长度为可以变化 de ,比如,存储字符串“abc",对于CHAR(20),表示你存储 de 字符将占20个字节(包括17个空字符),而同样 de VARCHAR2(20)则只占用3个字节 de 长度,...
  • bug记录,写sql的时候用到了convert将varchar转换为datetime类型,使用convert(datetime,字段),最后报错“从varchar数据类型到datetime数据类型的转换产生一个超出该范围的值” 经排查,where后面的条件查询出来并...

空空如也

空空如也

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

varchar2是什么数据类型