oracle字段类型限制与误区

今天做oracle数据库的批量导入时,做长度限制时,直接用length()>xxx,结果在插入汉字时出错了:长度超长.刚开始还觉得很奇怪,后来查下资料,是我对oracle字段长度限制的误解.现在整理一下.

char(byte)    

       固定长度字符串    最大长度2000字节

varchar2(byte)

         默认的表示方式,比如:varchar2(100),就相当于varchar2(100 byte),表示最大字节数是100,该字段最多能容纳100个字节,强调空间大小。保存汉字等字符时,就要小心了。如果你的数据库用的是GBK编码,那么一个汉字将占用2个字节,最多能存50个汉字,如果你的数据库用的是UTF8编码,那么一个汉字将占用3个字节,最多能存33个汉字。

varchar2(char)

       表示最大字符数是100,该字段最多能容纳100个字符,强调个数。假设varchar2(100 char),那么无论是数字、字母、汉字,都看成一个字符,最多写100个,当然,汉字越多,占用的空间越大,同样遵循上边的数据库编码原则。例如:存入一个汉字,底层占2或3个字节,存入一个字母,占1个字节.

nvarchar2()

      没有byte、char之分,类似于varchar2(char),只不过nvarchar2()屏蔽了数据库编码,无论是何种编码,nvarchar2()中一个汉字都占两个字节。

需要注意的是:

      无论是varchar2还是nvarchar2,最大字节数都是4000.所以varchar(2000 char),当存入2000个汉字时,这时的总字节为6000(utf-8)

但是最大的字节数为4000,这时多余的字节数就会被截取掉.

     所以,对于GBK编码的数据库而言,安全的写法为:varchar2(2000 char)、nvarchar2(2000),对于UTF8编码的数据库而言,安全的写法为:varchar2(1333 char)、nvarchar2(2000)。

猜你喜欢

转载自blog.csdn.net/mlsama/article/details/81169452
今日推荐