有没有人遇到过,疑惑过关于varchar和varchar2的使用,到底用哪个?为什么区分的问题?
多google一下,差不多就明白了,我就参考别人的讲解一下。
先说,char和nchar的区别。
一. char(varchar)与nchar(nvarchar)
1.长度比较:
使用前者存储,每个英文字符占用一个字节,中文占用两个字节,因此前者最大支持8000个英文字符,4000个中文汉字;
后者使用Unicode字符集,目的就是为了解决字符集的不兼容性,英文非英文都占用2个字节,因此不论什么字符都只是最大支持4000个字符
2.功能比较
可以看出使用nchar、nvarchar数据类型时不用担心输入的字符是英文还是汉字,较为方便,但在存储英文时数量上有些损失
然后是char和varchar的区别。
二. char(nchar)与varchar(nvarchar)的比较
1.数据存储开销。
a. 每个varchar列需要额外的两个字节,用于反映存储的数据的长度。
b. 每个可为NULL的char列,需要一些字节(空位图)来反应数据的为空性。
c. 无论实际数据的长度是多少,char按照定义的长度分配存储空间,为定长型。
d. varchar是变长字符数据类型,根据实际存储的数据长度来分配数据存储空间。
2.NULL值(空值)。
a. char列的NULL值占用存储空间。
b. varcahr列的NULL值不占用存储空间。
c. 插入同样数量的NULL值,varchar列的插入效率明显高出char列。
3.插入数据
无论插入数据涉及的列是否建立索引,char的效率都明显低于varchar。
4. 更新数据
如果更新的列上未建立索引,则char的效率低于varchar,差异不大;建立索引的话,效率较高。
5. 修改结构
a. 无论增加或是删除的列的类型是char还是varchar,操作都能较快的完成,而且效率上没有什么差异。
b. 对于增加列的宽度而言,char与varchar有非常明显的效率差异,修改varcahr列基本上不花费时间,而修改char列需要花费很长的时间。
6.数据检索
无论是否通过索引,varchar类型的数据检索略优于char的扫描。
最后,就是varchar和varchar2的区别。说实话,2者没啥,区别,前者是工业标准,后者是oracle自己自定的,在oracle里面会把varchar自定转换成varchar2,所以用oracle一般都是varchar2,不要纠结2者。如果,非要说有啥,区别看下面这段。
VARCHAR
The VARCHAR datatype stores character strings of varying length. The first two bytes contain the length of the character string, and the remaining bytes contain the string. The specified length of the string in a bind or a define call must include the two length bytes, so the largest VARCHAR string that can be received or sent is 65533 bytes long, not 65535. For converting longer strings, use the LONG VARCHAR external datatype.
VARCHAR2
The VARCHAR2 datatype is a variable-length string of characters with a maximum length of 4000 bytes
简单,翻译过来就是说,varchar只能最大接受存储65533个字节,其中2个字节记录这个变量的长度,
而varchar2最大可以接受4000个字节。这样说,应该差不多明白了吧