Oralce中VARCHAR2()与NVARCHAR2()的区别介绍
一、先来看看Oralce中VARCHAR2()和NVARCHAR2()的官方定义
官方文档定义如下:
VARCHAR2(size[BYTE|CHAR])
Variable-lengthcharacterstringhavingmaximumlengthsizebytesorcharacters.Maximumsizeis4000bytesorcharacters,andminimumis1byteor1character.YoumustspecifysizeforVARCHAR2.
BYTEindicatesthatthecolumnwillhavebytelengthsemantics.CHARindicatesthatthecolumnwillhavecharactersemantics.
NVARCHAR2(size)
Variable-lengthUnicodecharacterstringhavingmaximumlengthsizecharacters.ThenumberofbytescanbeuptotwotimessizeforAL16UTF16encodingandthreetimessizeforUTF8encoding.Maximumsizeisdeterminedbythenationalcharactersetdefinition,withanupperlimitof4000bytes.YoumustspecifysizeforNVARCHAR2.
二、中文翻译:
VARCHAR2(size[BYTE|CHAR])
具有最大长度的字节数(bytes)或字符数(char)的可变长度的字符类型。最大长度为4000字节/字符,最小长度是1字节/字符。你必须为VARCHAR2()类型指定大小。
BYTE代表该列以字节计算长度,CHAR代表该列以字符计算长度。
NVARCHAR2(size)
具有最大长度的带有字符集属性的可变长度的字符类型。它的长度是AL16UTF16字符集的2倍,UTF8字符集的三倍。它的最大长度取决于字符集,上限位4000字节。您必须为NVARCHAR2()类型指定大小。
三、实战演练
使用字符集为UTF8。
#验证NVARCHAR2(size)与VARCHAR2(sizeCHAR)相似 SQL>createtablet_varchar2(namevarchar2(6CHAR)); Tablecreated SQL>insertintot_varchar2values('中国'); 1rowinserted SQL>insertintot_varchar2values('中华人民共和'); 1rowinserted SQL>insertintot_varchar2values('中华人民共和国'); insertintot_varchar2values('中华人民共和国') ORA-12899:列"SCOTT"."T_VARCHAR2"."NAME"的值太大(实际值:7,最大值:6) SQL>createtablet_nvarchar2(namenvarchar2(6)); Tablecreated SQL>insertintot_nvarchar2values('中国'); 1rowinserted SQL>insertintot_nvarchar2values('中华人民共和'); 1rowinserted SQL>insertintot_nvarchar2values('中华人民共和国'); insertintot_nvarchar2values('中华人民共和国') ORA-12899:列"SCOTT"."T_NVARCHAR2"."NAME"的值太大(实际值:7,最大值:6) #验证NVARCHAR2(sie)与VARCHAR(sizeCHAR)存在最大长度不同 SQL>createtablet_varchar2(namevarchar2(4000CHAR)); Tablecreated SQL>createtablet_nvarchar2(namenvarchar2(4000)); createtablet_nvarchar2(namenvarchar2(4000)) ORA-00910:指定的长度对于数据类型而言过长
四、区别总结:
NVARCHAR2(size)与VARCHAR2(sizeCHAR)相似,唯一的区别是NVARCHAR2(size)的最大长度是4000字节(实验测试结果是,在utf8的字符集下,最大长度为2000字符),而VARCHAR2(sizeCHAR)的最大长度是4000字符。
好了,以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作能带来一定的帮助,如果有疑问大家可以留言交流。