我们在开发过程中,往往会遇到这样的问题,一个字段B VARCHAR2(100),为什么我们在用substr(B,100)后还会报异常?原因是字符串中存在汉字,下面我们先看看有关oracle中汉字究竟占多少字节的问题。
1. select userenv('language') from dual;
如果为SIMPLIFIED CHINESE_CHINA.ZHS16GBK,则汉字占2个字节
如果为SIMPLIFIED CHINESE_CHINA.AL32UTF8,则汉字占3个字节
2. substr返回是多少字符,substrb返回是多少字节,同理 length 与 lengthb
3. varchar(100)表示可以存100个字节,nvarchar(100)表示可以存100个字符(不管中文还是英文)
所以开发过程中要记录错误信息时,一定要注意字符串的长度,尤其对有中文汉字存在的情况。