First, as others have pointed out, if you are not using 12.1, the varchar2 and nvarchar2 data types are limited to 4000 bytes in SQL. In PL / SQL, they are limited to 32767. In 12.1, you can increase the SQL limit to 32767 using the MAX_STRING_SIZE parameter.
Secondly, if you are not working with an obsolete database that uses a non-Unicode character set that cannot be updated to use the Unicode character set, you would like to avoid the nvarchar2 and nchar data types in Oracle. In SQL Server, you use nvarchar when you want to save Unicode data. In Oracle, it is preferable to use varchar2 in a database whose character set supports Unicode (usually AL32UTF8 ) when you want to store Unicode data.
If you store Unicode data in an Oracle nvarchar2 column, the national character set will be used - this is almost certainly AL16UTF16 , which means that at least 2 bytes of memory are required for each character. A NVARCHAR2(4000) , therefore, probably cannot store more than 2000 characters. If you use the varchar2 column, on the other hand, you can use the variable width Unicode character set ( AL32UTF8 ), in which case English characters usually only need 1 byte, most European characters require 2 bytes, and most Asian characters require 3 bytes ( this, of course, is just a generalization). This will usually allow you to store significantly more data in the varchar2 column.
If you need to store more than 4000 bytes of data, and you are using Oracle 11.2 or later, you will have to use the LOB data type ( CLOB or NCLOB ).
Justin cave
source share