精华内容
下载资源
问答
  • 因为char只是一个空白填充到最大长度的VARCHAR2 - 即下面的列XY之间的差异:create table t(x varchar2(30),y char(30));插入t(x,y)值(rpad('a','',30),'a');绝对没有,并且考虑到以下列XY之间的差异:插入...

    因为char只是一个空白填充到最大长度的VARCHAR2 - 即下面的列X和Y之间的差异:

    create table t(x varchar2(30),y char(30)); 插入t(x,y)值(rpad('a','',30),'a');

    绝对没有,并且考虑到以下列X和Y之间的差异:

    插入t(x,y)值('a','a')

    是X消耗3个字节(空指示符,前导字节长度,'a'为1个字节),Y消耗32个字节(空指示符,前导字节长度,'a'为30个字节)

    嗯,varchar2将在某种程度上“在性能方面具有优势”。它帮助我们不是所有char(30)总是30个字节 - 对我们来说,它只是一个空白填充到最大长度的varchar2。它帮助我们处理 - ZERO,zilch,zippo。

    任何时候你看到有人说“它的速度提高了50%”,就是这样 - 没有例子,没有科学,没有事实,没有任何故事要支持它 - 只要大声笑出来并继续前进。

    该页面上还有其他“组成的东西”,例如:“在CHAR中搜索速度更快,因为所有字符串都存储在 彼此指定的位置,系统不必 搜索字符串的结尾。而在VARCHAR中系统必须 首先找到字符串的结尾然后去搜索“。

    FALSE:char只是一个varchar2空白填充 - 我们不会将字符串“存储在彼此指定的位置”。我们搜索字符串的结尾 - 我们使用前导字节长度来解决问题。

    展开全文
  • 在ODI同步中碰到的问题,记录一下:前述:最近从生产往测试同步数据出现问题,具体报字段值过大的异常,检查了以下总结问题如下eg:varchar2(30)与varchar2(30 CHAR)的区别|| ||按字节存储 按字符存储 这里的30表示...

    在ODI同步中碰到的问题,记录一下:

    前述:最近从生产往测试同步数据出现问题,具体报字段值过大的异常,检查了以下总结问题如下

    eg:

    varchar2(30)与varchar2(30 CHAR)的区别

    ||                           ||

    按字节存储                   按字符存储 这里的30表示字符个数

    这里的30表示字节个数

    比如有的编码方式一个字符需要二个字节长度, 而另一些编码方式一个字符需要三个字节长度

    ———————————————————— ————————————————————

    ||                                                                ||

    A库varchar2(30)                                         B库varchar2(30)

    ||                                                                ||

    能放15个字符                                                 能放10个字符

    若现在需求A库导数据到B库

    则存储在A库中的超过(>)10个字符的内容导入B库时就报字段值过大的异常

    若此时将B库的该字段类型改为varchar2(30 CHAR) 其实就等于varchar2(90)

    这样肯定就能正常导入了,其实此时将B库改为varchar2(45)就刚好OK了

    综上:在新建表时最好都以varchar2结合CHAR形式来定义,可以屏蔽不同数据库的编码。

    展开全文
  • 1.char长度固定,varchar2长度可变。例如,存储字符串“123”,char(10)表示存储的内容占10个字节:123...2.对于varchar和varchar2暂时未测出不同之处。varchar可以与其他数据库兼容,varchar2是oracle独有的。oracl...

    1.char长度固定,varchar2长度可变。例如,存储字符串“123”,char(10)表示存储的内容占10个字节:123      (包含7个空格),varchar2(20)只占用3个字节:123当存储小于10时,按实际长度存储。综上,可以判断出char比varchar2效率高但浪费空间。

    注:varchar最长为4000字节,char最长为2000字节

    2.对于varchar和varchar2暂时未测出不同之处。varchar可以与其他数据库兼容,varchar2是oracle独有的。oracle推荐使用varchar2。

    varchar -- 存放定長的字符數據,最長2000個字符;

    varchar2 -- 存放可變長字符數據,最大長度為4000字符。

    目前没有本质的区别

    但是:

    varchar2是oracle提供的独特的数据类型

    oracle保证在任何版本中该数据类型向上和向下兼容

    但不保证varchar,这是因为varchar是标准sql提供的数据类型

    有可能随着sql标准的变化而改变

    2: varchar2 

    VARCHAR2 Datatype 

    The VARCHAR2 datatype specifies a variable-length character string. When you 

    create a VARCHAR2 column, you supply the maximum number of bytes or 

    characters of data that it can hold. Oracle subsequently stores each value in the column exactly as you specify it, provided the value does not exceed the column’s maximum length. If you try to insert a value that exceeds the specified length, then Oracle returns an error. 

    You must specify a maximum length for a VARCHAR2 column. This maximum must 

    be at least 1 byte. 

    3: varchar 

    VARCHAR Datatype 

    The VARCHAR datatype is currently synonymous with the VARCHAR2 datatype. 

    Oracle recommends that you use VARCHAR2 rather than VARCHAR. In the future, 

    VARCHAR might be defined as a separate datatype used for variable-length character strings compared with different comparison semantics. 

    char对于不够位数的用空格添补,varchar2不用。可以试着比较一下。

    ---------------------------

    varchar2和varchar的目前没有区别,不过ocacle以后的版本就不支持varchar类型,如果想新版本的数据库兼容就不要用varchar,如果想和其它数据库兼容就不要用varchar2

    展开全文
  • 最近工作处理了一些有关Oracle字符数据类型的问题,特做如下整理,希望大家共同学习:一、首先对charvarchar2类型做下比较:区别:1.CHAR的长度是固定的,而VARCHAR2的长度是可以变化的, 比如,存储字符串...

    最近工作处理了一些有关Oracle字符数据类型的问题,特做如下整理,希望和大家共同学习:

    一、首先对char与varchar2类型做下比较:

    区别:

    1.CHAR的长度是固定的,而VARCHAR2的长度是可以变化的, 比如,存储字符串“abc",对于CHAR (20),表示你存储的字符将占20个字节(包括17个空字符),而同样的VARCHAR2 (20)则只占用3个字节的长度,20只是最大值,当你存储的字符小于20时,按实际长度存储。

    例:

    SQL> create table testchar(c1 char(20), c2 varchar2(20));

    表已创建。

    SQL> insert into testchar values('dylan','dylan');

    已创建 1 行。

    SQL> commit;

    提交完成。

    SQL> select length(t.c1), length(t.c2) from testchar t;

    LENGTH(T.C1) LENGTH(T.C2)

    ------------ ------------

    20            5

    2.CHAR的效率比VARCHAR2的效率稍高。

    3.目前VARCHAR是VARCHAR2的同义词。工业标准的VARCHAR类型可以存储空字符串,但是oracle不这样做,尽管它保留以后这样做的权利。Oracle自己开发了一个数据类型VARCHAR2,这个类型不是一个标准的VARCHAR,它将在数据库中varchar列可以存储空字符串的特性改为存储NULL值。如果你想有向后兼容的能力,Oracle建议使用VARCHAR2而不是VARCHAR。

    何时该用CHAR,何时该用varchar2?

    CHAR与VARCHAR2是一对矛盾的统一体,两者是互补的关系.

    VARCHAR2比CHAR节省空间,在效率上比CHAR会稍微差一些,即要想获得效率,就必须牺牲一定的空间,这也就是我们在数据库设计上常说的‘以空间换效率’。

    VARCHAR2虽然比CHAR节省空间,但是如果一个VARCHAR2列经常被修改,而且每次被修改的数据的长度不同,这会引起‘行迁移’ (Row Migration)现象,而这造成多余的I/O,是数据库设计和调整中要尽力避免的,在这种情况下用CHAR代替VARCHAR2会更好一些。

    二、关于oracle中文字符占用多少存储空间问题

    方法一:

    一个汉字在Oracle数据库里占多少字节跟数据库的字符集有关,UTF8时,长度为3.

    测试一个汉字在各种字符集中到底占用多少字节:

    SQL> select    lengthb('汉')    from    dual;

    LENGTHB('汉')

    -------------

    2

    方法二:

    查看oracle数据库当前字符集:

    SQL> select * from nls_database_parameters where parameter='NLS_CHARACTERSET';

    PARAMETER                      VALUE

    ------------------------------ ----------------------------------------------------------------

    NLS_CHARACTERSET               ZHS16GBK

    一个英文字母是一个字符,一个中文汉字是几个字符呢?我们知道,一个中文汉字是双字节字符,但它有几个字符与其数据库字符集有关。如果数据库字符集使用单字节US7ASCII,则一个中文汉字是二个字符;如果数据库字符集使用双字节字符集ZHS16GBK,则一个中文汉字是一个字符。有关这一点可以使用 Oracle的函数Substr得到证明。

    使用US7ASCⅡ字符集时:

    SQL> select substr('南京大学',1,2) from dual;

    SUBS

    ----

    使用ZHS16GBK字符集时:

    SQL> select substr('南京大学',1,2) from dual;

    SUBS

    ----

    南京

    三、关于length与lengthb函数的比较与使用:

    在不同的数据库,因为字符集的不同,LENGTHB得到的值可能会不一样。如ZHS16GBK采用两个byte位来定义一个汉字。而在UTF8,采用3个byte。

    SQL>SELECT USERENV('LANGUAGE') FROM DUAL;

    USERENV('LANGUAGE')

    ----------------------------------------------------

    AMERICAN_AMERICA.ZHS16GBK

    SQL>select length('北大') from dual;

    2

    SQL>select lengthb('北大') from dual;

    4

    SQL>select length('Beida') from dual;

    5

    SQL>select lengthb('Beida') from dual;

    通过这个示例,我们可以看出来,Length 和 Lengthb 函数的一个重要用处,就是用来判断记录值里是否有中文内容。

    如果有中文,那么Length() != Lengthb()

    如果没有中文,那么Length() == Lengthb()

    展开全文
  • Oracle定义字符串类型VARCHAR2和CHAR指定长度的用法如下:varchar2( ) 是介于1~4000之间的一个数,表示最多占用4000字节的存储空间。char( ) 是介于1~2000之间的一个数,表示最多占用2000字节的存储空间。那其中的...
  • 最近用到Hibernate自动建表,在用到String的时候,默认会创建varchar2类型字段,如:设置length=10,则创建后字段属性为varchar2(10 char),而非varchar2(10)。 由于之前没留意到这个,就网上查了一下,才知道原来...
  • Mysql中varchar和char区别

    2021-01-19 10:44:52
    一、varchar和char的区别:区别一:定长变长char表示定长、长度固定,varchanr表示变长,即长度可变。即char类型是规定多少字长则必须存储多少字长,超过的长度的字段则只能截取出对应的长度进行存储,相对于要求...
  • Oracle的CHAR和VARCHAR2

    2021-05-01 04:40:13
    Oracle的CHAR类型是固定长度,VARCHAR2不是固定长度,只有最大长度,所以VARCHAR2CHAR节约,但没有CHAR效率高。而CHAR在进行比较时是使用blank-padded语义 ,即自动填充空格,使比较中的两个CHAR类型达到长度相同...
  • MySQL中varcharchar区别

    2021-02-02 14:41:21
    MySQL中varchar最大长度是多少?一. varchar存储规则:4.0版本以下,varchar(20),指的是20字节,如果存放UTF8汉字时,只能存6个(每个汉字3字节)5.0版本以上,varchar(20),指的是20字符,无论存放的是数字、字母...
  • 最初由 mihuxiao 发布[B]关于char和varchar2的比较char类型与char型或字符常量的比较,在比较时使用补齐空格的方式进行比较。varchar2类型与varchar2类型,char字符常量的比较,在比较时不补充空格,直接比较。...
  • I have a varchar2 field and want to split it to array of charsLike 'ABCDEF' --> 'A' 'B' 'C' 'D' 'E'How can i convert my Field Values to chars array?解决方案If you actually mean a PL/SQL collection ...
  • 在MySQL5.0.3及以上的版本中,varchar数据类型的长度支持到了65535,也就是说可以存放65532个字节的数据,起始位结束位占去了3个字节,也就是说,在5.0.3以下版本中需要使用固定的TEXT或BLOB格式存放的数据可以在...
  • charvarcharvarchar2区别

    千次阅读 2021-01-28 04:07:12
    char varchar varchar2 的区别 区别: 1.CHAR的长度是固定的,而VARCHAR2的长度是可以变化的, 比如,存储字符串“abc,对于CHAR (20),表示你存储的字符将占20个字节(包括17个空字符),而同样的VARCHAR2 (20)则只...
  • varchar和char的区别

    2020-12-26 23:56:31
    char 表示定长,长度固定,varchar表示变长,即长度可变。char如果插入的长度小于定义长度时,则用空格填充;varchar小于定义长度时,还是按实际长度存储,插入多长就存多长。 因为其长度固定,char的存取速度还是要...
  • char和varchar类型相似,但是它们的存储检索方式不同。在MySQL5.0.3,它们在最大长度是否保留尾部空格也不相同。char和varchar定义了字符串的最大长度。例如,char(30)可以放30个字符。char列的长度在你建表的...
  • 1. char类型的长度是固定的,varchar的长度是可变的。这就表示,存储字符串'abc',使用char(10),表示存储的字符将占10个字节...2.char类型的效率比varchar的效率稍高3.varcharvarchar2的区别varchar2是oracle开...
  • mysql中varchar类型的字段,如果存储中文字符,那么可以varchar(32)可以存储多少个中文字符? tb_fruit表中有字段name。 函数char_length(field_name>)函数length(field_name)都表示该字段的长度。 char_length...
  • char varchar 的区别

    2021-03-13 01:03:59
    char varchar 的区别固定长度 (char) 或可变长度 (varchar) 字符数据类型。char[(n)]长度为 n 个字节的固定长度且非 Unicode 的字符数据。n 必须是一个介于 1 8,000 之间的数值。存储大小为 n 个字节。char 在...
  • 前述VARCHAR和CHAR是两种最主要的字符串类型。不幸的是,很难精确地解释这些值是怎么存储在磁盘内存中的,因为这跟存储引擎的具体实现有关。下面的描述假设使用的存储引擎是InnoDB/或者MyISAM。如果使用的不是这...
  • char varchar varchar2 的区别 http://blog.csdn.net/honglei_zh/article/details/7172538区别:1.CHAR的长度是固定的,而VARCHAR2的长度是可以变化的, 比如,存储字符串“abc",对于CHAR (20),表示你存储的字符将...
  • b2bb2b2,,他们都具有两个字段,id自增长、主键、int类型,b2bname在b2b表中使用的是Varchar(255),在b2b2表中使用的是char(255)。步骤二:创建插入大量数据的存储过程。步骤三:添加测试数...
  • 在MySQL中,不同的存储引擎对CHAR和VARCHAR的使用原则有所不同,这里简单概括如下: MyISAM存储引擎:建议使用固定长度的数据列代替可变长度的数据列。 MEMORY 存储引擎:目前都使用固定长度的数据行存储,因此无论...
  • 在mysql教程中charvarchar的区别呢,都是用来存储字符串的,只是他们的保存方式不一样罢了,char有固定的长度,而varchar属于可变长的字符类型。charvarchar的区别char (13)长度固定, 如'www.jb51.net' 存储...
  • 关于char 类型转 varchar类型的问题

    千次阅读 2021-02-07 13:27:29
    问题详情关于char 类型转 varchar类型的问题由于想把表设计为静态的表,所以牺牲了一点空间,有两个字段使用了char(40),导致使用MSSQL的OPENRowSet()函数无法处理...所以本人想在查询语句中进行转换,却发现无法把char...
  • MySQL查询当前字段,所有列的长度SELECT LENGTH(title) FROM nx_blogtitle是某一列 nx_blog是表名CHAR和VARCHAR`类型相似,但它们被存储检索的方式不同VARCHAR值存储为1字节或2字节长度前缀加数据。长度前缀表示值...
  • 一、inttinyint的区别大小:tinyint在mysql中占用1个字节 即:1 bytes = 8 bit ,一个字节最多可以代表的数据长度是2的8次方:11111111 = 256在计算机中也就是-128到127int在占用4个字节,即:2的32次方 =4 294 967 ...
  • 对于char来说,最多能存放的字符个数为255,编码无关 varchar的特点 varchar表示可变长字符串,长度是可变的; 插入的数据是多长,就按照多长来存储; varchar在存取方面与char相反,它存取慢,因为长度不固定...
  • varchar2(* char)与varchar2(*)最近用到Hibernate自动建表,在用到String的时候,默认会创建varchar2类型字段,如:设置length=10,则创建后字段属性为varchar2(10 char),而非varchar2(10)。由于之前没留意到这个,...
  • char和varchar的区别

    2021-01-04 12:33:54
    字符字节的对应关系是不同的。 一般来说,半角英文状态下一个字母或数字(称之为字符)占用一个字节,一个汉字用两个字节表示。 在不同的编码方式下一个字符占的字节数是不同的,所以两者是不能划等号的。 1...
  • 定长变长 char 表示定长,长度固定,varchar表示变长,即长度可变。char如果插入的长度小于定义长度时,则用空格填充;varchar小于定义长度时,还是按实际长度存储,插入多长就存多长。 因为其长度固定,char的...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 266,982
精华内容 106,792
关键字:

varchar2和char